LoginSignup
6
6

More than 5 years have passed since last update.

Nginx+PHP-FPMで異なるSSL証明書を使う時の覚書

Last updated at Posted at 2016-03-07

SNIを用いて異なるSSL証明書を使ったサイトを複数構築する場合で
どういうわけか、表示されるものと表示されない状態のものが多発したので
テストサーバ上で検証した結果、セッションに原因があることを把握した。

いつもは "php.ini" や ".user.ini" に記述していた。

session.save_path = "/var/lib/php/session"

ところが、Apacheで運用するにはそれでも良かったが
NginxとPHP-FPMを使う今回の仕様では

"/etc/php-fpm.d/www.conf" の最終行付近に該当箇所を発見。

php_value[session.save_path] = /var/lib/php/session

それを必要数分だけ "/etc/php-fpm.d/www.conf" をコピーしてそれぞれに合う設定ファイルを作成した。

重複してはならない該当箇所のみ修正。

例)異なるSSL証明書でWordPressとconcrete5を共存させる場合

# WordPress
sed -i "s|^\[www\]$|[wp]|g" /etc/php-fpm.d/wp.conf
sed -i "s|^listen = /var/run/php-fpm/www.sock$|listen = /var/run/php-fpm/wp.sock|g"  /etc/php-fpm.d/wp.conf
sed -i "s|php_value\[session.save_path\]|;\0|g" /etc/php-fpm.d/wp.conf
sed -i "s|php_value\[soap.wsdl_cache_dir\]|;\0|g" /etc/php-fpm.d/wp.conf
sed -i "423a\php_value[session.save_path]    = /var/www/wp_session" /etc/php-fpm.d/wp.conf
sed -i "424a\php_value[soap.wsdl_cache_dir]  = /var/www/wsdlcache" /etc/php-fpm.d/wp.conf
# concrete5
sed -i "s|^\[www\]$|[c5]|g" /etc/php-fpm.d/c5.conf
sed -i "s|^listen = /var/run/php-fpm/www.sock$|listen = /var/run/php-fpm/c5.sock|g"  /etc/php-fpm.d/c5.conf
sed -i "s|php_value\[session.save_path\]|;\0|g" /etc/php-fpm.d/c5.conf
sed -i "s|php_value\[soap.wsdl_cache_dir\]|;\0|g" /etc/php-fpm.d/c5.conf
sed -i "423a\php_value[session.save_path]    = /var/www/c5_session" /etc/php-fpm.d/c5.conf
sed -i "424a\php_value[soap.wsdl_cache_dir]  = /var/www/wsdlcache" /etc/php-fpm.d/c5.conf

これに加えて、Nginxの設定ファイルもそれぞれに読み込む "WebSocket" を指定する。

# WordPress
    location ~ \.php$ {
        try_files                       $uri =404;
        include                         /etc/nginx/fastcgi_params;
        fastcgi_pass                    unix:/var/run/php-fpm/wp.sock;
        fastcgi_index                   index.php;
        fastcgi_param                   SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param                   HTTPS on;
        fastcgi_pass_header             "X-Accel-Redirect";
        fastcgi_pass_header             "X-Accel-Expires";
    }

# concrete5
    location ~ \.php($|/) {
        try_files                       $uri =404;
        include                         /etc/nginx/fastcgi_params;
        fastcgi_pass                    unix:/var/run/php-fpm/c5.sock;
        fastcgi_index                   index.php;
        fastcgi_param                   SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param                   HTTPS on;
        fastcgi_pass_header             "X-Accel-Redirect";
        fastcgi_pass_header             "X-Accel-Expires";
    }

最後にテストしてエラーが出なければリロードする。

おまけ

共存するサイト数に依っては、サーバスペックに依存するので
"/etc/php-fpm.d/*.conf"の"pm.max_children"の数値をデフォルトから変更しておくとサーバへの負荷が抑えられるので、サイト数に応じて丁度よい加減を見つけてみるといいかもしれない。

追記

SSLを扱うのに入れておかなければならない項目を忘れてました <(_ _)>
下記を "php.ini" 及び ".user.ini"へ追記します。

session.cookie_secure = On
6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6