nginxで動かしているWordPressの管理画面をSSL化する

今日も自サーバーをいじっていたら絶好調に夜更かし!後先考えていないころすけ(@wg_koro)です。

鍵(SSL)

随分前にブログ用のSSL証明書を取得したのですが、今まで設定していませんでした。せっかく取ったのにもったない…ってことでSSLを導入してみました。

現環境:

  • リバースプロキシ → nginx
  • Webサーバー → nginx
  • PHP → fastcgi

今回やりたいこと:
WordPressの管理画面だけSSL化する。トップページや通常のエントリーなどのページではSSLを使用しない。

PHPの設定

ログイン画面と管理画面でSSLを使えるように、WordPress設定ファイルを編集します。

[php title=”wp-config.php”]
// ↓デフォルトだとこの2行はコメントアウトされているので解除
define(‘FORCE_SSL_LOGIN’, true);
define(‘FORCE_SSL_ADMIN’, true);
[/php]

これを設定すると管理画面下のリンクや静的ファイル(js, css)のパスが全てHTTPSになるようです。

リバースプロキシの設定

管理画面は全てHTTPSへリダイレクトするように習性

[shell]
server {
listen 80;
server_name zafiel.wingall.com;

# WordPress管理画面(/wp-*)は全てHTTPSへ飛ばす
location /wp- {
rewrite ^(.*) https://$host/$1 last;
}

# (以下略)
}
[/shell]

SSL設定

管理画面下の静的ファイルやPHPはここで全部処理しています。

[shell]
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]

とまぁ

このように設定したら動作しました。管理画面全ての機能を試したわけではないですが、とりあえずは動いているっぽいです。

ま、何かあったら随時直そう…(・ω・)

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください