ISPConfig3(nginx+php-fpm)でGeeklogのURLリライトを有効(On)にして使う方法
投稿者:winkey
閲覧数20,132
nginx+php-fpm環境(ISPConfig3利用)では、GeeklogのURLリライトをONにする(コンフィギュレーション>サイト>URLリライトを「はい」)と、記事などのURLが http://[domain]/article.php/welcome のようなURLになりますが、この記事をクリックしてアクセスしようとすると「404 Not Found」エラーになります。
URLリライトの設定を「いいえ」に戻せばまた記事にアクセスできます。
Apache2+fcgidで動いてた既存サイトをnginx+php-fpm環境へ移行した際にこの現象がでて焦りました
調べてみると、nginxではApacheのAcceptPathInfoによる$_SERVER['PATH_INFO']が作成されないようなので自分でPATH_INFOを作って設定してやる必要があるようです。
バージョン情報
nginx | 1.1.19 |
php5-fpm | 5.3.10 |
geeklog | 1.7.1sr1 |
GeeklogでURLリライトをONにしてエラーにならないnginx設定
ISPConfigが作っているvhostの設定ファイルを直接いじる場合
※あとでISPConfig側でサイトをいじったら上書きされちゃいました。この方法の場合そういった注意が必要です。
location ~ \.php($|/) {
try_files /d6904c8a945146fa575efcc1eae57abd.htm @php;
}
location @php {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
set $script $uri;
set $path_info "";
if ($uri ~ "^(.+.php)(/.+)") {
set $script $1;
set $path_info $2;
}
fastcgi_pass 127.0.0.1:9010;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fastcgi_param PATH_INFO $fastcgi_script_name;
#fastcgi_param SCRIPT_NAME $script;
fastcgi_param PATH_INFO $path_info;
fastcgi_intercept_errors on;
}
ISPConfig3でnginxを設定
ISPConfiのadmin権限があるならサイトのオプションから「nginx Directives」へ下記の設定をコピペして保存すれば1分後ぐらいには設定が有効になります。
location ~ \.php/ {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
set $script $uri;
set $path_info "";
if ($uri ~ "^(.+.php)(/.+)") {
set $script $1;
set $path_info $2;
}
fastcgi_pass 127.0.0.1:9018;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $path_info;
fastcgi_intercept_errors on;
}
※fastcgi_passのポート番号はサイトごとに違います。そのサイトのポート番号を調べてから置き換えて下さい。