今日も自サーバーをいじっていたら絶好調に夜更かし!後先考えていないころすけ(@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]
とまぁ
このように設定したら動作しました。管理画面全ての機能を試したわけではないですが、とりあえずは動いているっぽいです。
ま、何かあったら随時直そう…(・ω・)