今日も自サーバーをいじっていたら絶好調に夜更かし!後先考えていないころすけ(@wg_koro)です。
随分前にブログ用のSSL証明書を取得したのですが、今まで設定していませんでした。せっかく取ったのにもったない…ってことでSSLを導入してみました。
現環境:
- リバースプロキシ → nginx
- Webサーバー → nginx
- PHP → fastcgi
今回やりたいこと:
WordPressの管理画面だけSSL化する。トップページや通常のエントリーなどのページではSSLを使用しない。
PHPの設定
ログイン画面と管理画面でSSLを使えるように、WordPress設定ファイルを編集します。
// ↓デフォルトだとこの2行はコメントアウトされているので解除
define(‘FORCE_SSL_LOGIN’, true);
define(‘FORCE_SSL_ADMIN’, true);
[/php]
これを設定すると管理画面下のリンクや静的ファイル(js, css)のパスが全てHTTPSになるようです。
リバースプロキシの設定
管理画面は全てHTTPSへリダイレクトするように習性
server {
listen 80;
server_name zafiel.wingall.com;
    # WordPress管理画面(/wp-*)は全てHTTPSへ飛ばす
    location /wp- {
        rewrite ^(.*) https://$host/$1 last;
    }
    # (以下略)
}
[/shell]
SSL設定
管理画面下の静的ファイルやPHPはここで全部処理しています。
server {
listen 443;
server_name zafiel.wingall.com;
    access_log  /var/log/nginx/ssl.access.log main;
    error_log   /var/log/nginx/ssl.error.log;
    # SSLの鍵
    ssl_certificate     /etc/nginx/ssl/ssl.crt;
    ssl_certificate_key /etc/nginx/ssl/ssl.key;
    ssl_session_timeout 10m;
    ssl_protocols       SSLv2 SSLv3 TLSv1;
    ssl_ciphers         ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers   on;
    keepalive_timeout   60;
    client_max_body_size 20M;
    # WordPress管理画面以外はHTTPへリダイレクト
    if ($uri !~ ^/wp-) {
        rewrite ^(.*)?$ http://$host/$1 last;
    }
    location /wp- {
        root   /var/www/html;
        index  index.html index.htm index.php;
        if (-f $request_filename) {
            break;
        }
        if (!-e $request_filename) {
            rewrite ^(.+)$  /index.php?q=$1 last;
        }
    }
    location ~ \.php$ {
        root           www;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  REMOTE_ADDR $http_x_real_ip;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;
        include        fastcgi_params;
    }
}
[/shell]
とまぁ
このように設定したら動作しました。管理画面全ての機能を試したわけではないですが、とりあえずは動いているっぽいです。
ま、何かあったら随時直そう…(・ω・)
