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の設定方法が悪いのか?
その他に、追加のオプションが必要になるのか?
原因が分からないので、明日先輩にアドバイスもらう事で、今日は撤収です・・・