CMS, WordPress, サーバー
nginxで動かしているWordPressの管理画面をSSL化する
今日も自サーバーをいじっていたら絶好調に夜更かし!後先考えていないころすけ(@wg_koro)です。
随分前にブログ用のSSL証明書を取得したのですが、今まで設定していませんでした。せっかく取ったのにもったない…ってことでSSLを導入してみました。
現環境:
- リバースプロキシ → nginx
- Webサーバー → nginx
- PHP → fastcgi
今回やりたいこと:
WordPressの管理画面だけSSL化する。トップページや通常のエントリーなどのページではSSLを使用しない。
PHPの設定
ログイン画面と管理画面でSSLを使えるように、WordPress設定ファイルを編集します。
1 2 3 |
// ↓デフォルトだとこの2行はコメントアウトされているので解除 define('FORCE_SSL_LOGIN', true); define('FORCE_SSL_ADMIN', true); |
これを設定すると管理画面下のリンクや静的ファイル(js, css)のパスが全てHTTPSになるようです。
リバースプロキシの設定
管理画面は全てHTTPSへリダイレクトするように習性
1 2 3 4 5 6 7 8 9 10 11 |
server { listen 80; server_name zafiel.wingall.com; # WordPress管理画面(/wp-*)は全てHTTPSへ飛ばす location /wp- { rewrite ^(.*) https://$host/$1 last; } # (以下略) } |
SSL設定
管理画面下の静的ファイルやPHPはここで全部処理しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
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; } } |
とまぁ
このように設定したら動作しました。管理画面全ての機能を試したわけではないですが、とりあえずは動いているっぽいです。
ま、何かあったら随時直そう…(・ω・)
コメントを残す