Geeklog

ISPConfig3(nginx+php-fpm)でGeeklogのURLリライトを有効(On)にして使う方法

投稿者: 閲覧数7,562

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側でサイトをいじったら上書きされちゃいました。この方法の場合そういった注意が必要です。

/etc/nginx/sites-available/[domain].vhost
        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のポート番号はサイトごとに違います。そのサイトのポート番号を調べてから置き換えて下さい。