WEBシステム開発・デザイン制作などすべての作業を一貫してご提供しております。(大阪・東京近辺)

nginx php-fpm 環境でPATH_INFOが取得できない!取得する方法

少し古いシステムをApacheサーバーからNginxサーバーへ移行したさいに、TOPページは問題無くアクセスできるにリンク先をクリックするとエラーになってしまいました。

Nginxのリダイレクトなどの設定などに不備があるのかもしれない?

そう考え設定ファイルやシステムの仕様を眺めながら、それでも修正できないのでプログラムコードを見ることにした。

原因は、PATH_INFOを取得する箇所で空白になっている為に不具合になっていました。

Apache mod_phpでは問題無く動作しているのになぜ?CGI版(php-fpm)だと通常では取得できないようです。


PATH_INFOの取得を設定する為のサンプルを早速試してみました。

wiki.nginx.org/PHPFcgiExample


vi /etc/nginx/fastcgi_params

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;


vi /etc/nginx/conf.d/xxxxxxxxxx.conf

location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}

・・・・
・・・・
}


最後に

vi /etc/php-fpm.d/xxxxxxxxxx.conf

php_admin_value[cgi.fix_pathinfo] = 0
security.limit_extensions = .php


これだけで、動作するらしいのですが

やっぱり動作せず。

エラーログには

“Access to the script ‘/xxxxxxx/xxxxxxx/xxxxxxx.xxx’ has been denied (see security.limit_extensions)”

と出力されてしまします。

security.limit_extensionsの設定方法が悪いのか?

その他に、追加のオプションが必要になるのか?

原因が分からないので、明日先輩にアドバイスもらう事で、今日は撤収です・・・