NginxをSSL付きで動かすために設定したこと
Nginxは/etc/nginx/sites-available/default の設定で動いて、
これに、SSL付きでWordPressが動くように設定してみたいと思います。
環境
- Ubuntu12
- Nginx1.2.2
- PHP 5.3.10
PHPはNginx + php5-fpmで動いています。
SSL証明書
公開鍵と秘密鍵は準備されているものとします。
今回は以下の位置にあるものとします。
[shell]
/etc/ssl/ssl-cert.pem (公開鍵)
/etc/ssl/private/ssl-cert.key (秘密鍵)
[/shell]
Nginxの設定
最初に書いたように/etc/nginx/sites-available/defaultで動いているので、
このファイルを追加修正します。
一番下にコメントアウトしてありますが
# HTTPS server
#
#server {
# listen 443;
(以下省略)
とある程度記述してあるので、参考にしました。
設定を合わせるだけで、ほぼそのままです。
[shell]
listen 443;
server_name localhost; # localhostを適宜変更
root /usr/share/nginx/www;
index index.php index.html index.htm;
ssl on;
ssl_certificate /etc/ssl/ssl-cert.pem; # 公開鍵があるところまでのパス、相対パスの時はnginx.confを基準
ssl_certificate_key /etc/ssl/private/ssl-cert.key; # 秘密鍵があるところまでのパス、相対パスの時はnginx.confを基準
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
ssl_prefer_server_ciphers on;
location / {
try_files $uri $uri/ /index.html; # お好みで
}
[/shell]
Nginxとphp5-fpmの組み合わせで動いているので、以下を追加しました。
[shell]
pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .php$ {
fastcgi_split_path_info ^(.+.php)(/.+)$;
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
[/shell]
WordPressのパーマリンクでデフォルト以外に対応するなら(rewriteルール)以下をlocation /に追加
[shell]
location / {
root /usr/share/nginx/www;
index index.php;
if (-f $request_filename) {
expires 30d;
break;
}
if (!-e $request_filename) {
rewrite ^.+?(/wp-.) $1 last;
rewrite ^.+?(/..php)$ $1 last;
rewrite ^ /index.php last;
}
}
[/shell]
以上、まとめると
以下のようになっています。
server {
listen 443;
server_name localhost; # localhostを適宜変更
root /usr/share/nginx/www;
index index.php index.html index.htm;
ssl on;
ssl_certificate /etc/ssl/ssl-cert.pem; # 公開鍵があるところまでのパス、相対パスの時はnginx.confを基準
ssl_certificate_key /etc/ssl/private/ssl-cert.key; # 秘密鍵があるところまでのパス、相対パスの時はnginx.confを基準
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
ssl_prefer_server_ciphers on;
location / {
try_files $uri $uri/ /index.html; # お好みで
root /usr/share/nginx/www;
index index.php;
if (-f $request_filename) {
expires 30d;
break;
}
if (!-e $request_filename) {
rewrite ^.+?(/wp-.*) $1 last;
rewrite ^.+?(/.*\.php)$ $1 last;
rewrite ^ /index.php last;
}
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
検証しなければならない所は多々あると思うのですが、とりあえず httpsでアクセス可能になりました。