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