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でアクセス可能になりました。

出水市でWeb屋やってます。Webサイト作ったり、サーバ設定したりしている釣りの好きなMacユーザーです。 ドラクエ5のキラーパンサーにはゲレゲレと名付けました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

コメントする

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