WordPressのSSL化(Nginx)


SSLの取得

無料で使えるSSLで、sslの証明書を取得しましょう!
やり方は、この方の記事が大変わかりやすいです。→ StartSSLの無料サーバー証明書を使う

概要

http:// でも https:// でもアクセスできるサイトにしようと思います。

  1. wp-config.phpの編集
  2. nginxの設定

設定する

  1. wp-config.phpの編集
    schemeによってhttpsにするか判断します。

    /** SSL setting */
    define('FORCE_SSL_ADMIN', true);
    if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
      $_SERVER['HTTPS']='on';
    
  2. nginxの設定
    wordpressが動作しているnginxの設定に、以下の様にx_forwarded_protoに $schemeをセットします。

    < 略>
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Remote-Addr $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    < 略>
    

    設定を反映します。

    % sudo /etc/init.d/nginx reload
    

無限リダイレクトループに陥ったら

GoogleでwordpressのSSL化で検索すると「設定」→「一般」→「WordPress アドレス (URL)」と「サイトアドレス (URL)」
のスキーマを http:// を https:// にするとありますが、これをやると、ページがループしてアクセスできなくなっちゃうことがあります。
こうなるともう、管理ページにすらログインできなくなっちゃうので、mysqlの以下のカラムの値を無理やり修正する必要が出てきます。

mysql -u USER -p PASS DBNAME
mysql> show databases;
mysql> connect YOUR-DATABASE-NAME
mysql> SELECT * FROM wp_options WHERE option_name = 'siteurl';
mysql> SELECT * FROM wp_options WHERE option_name = 'home';
mysql> begin;
mysql> UPDATE wp_options SET option_value='http://YOURDOMAIN' WHERE option_name = 'siteurl'
mysql> UPDATE wp_options SET option_value='http://YOURDOMAIN' WHERE option_name = 'home'
mysql> SELECT * FROM wp_options WHERE option_name = 'siteurl';
mysql> SELECT * FROM wp_options WHERE option_name = 'home';
mysql> commit;
mysql> \q

これでアクセスしたら治ります。。。

あと、プラグインも試しましたが、やはりループを起しましたとさ。ヽ(´ー`)ノ