我将Nginx 1.2.4与PHP-FPM 5.4.8结合使用,并使用fastcgi pass来尝试将自定义parameter passing给PHP 。 以下是我迄今为止发现的选项:
使用env指令在nginx设置一个环境variables,并从PHP获取getenv()或$_ENV 。 问题是env只在main上下文中运行,而我需要在server上下文中设置参数。
使用fastcgi_param指令为它devise的。
我试过用fastcgi_param改变一些参数的值,但是不成功:
nginx的:
fastcgi_param PATH_INFO "/var/tmp";
PHP:
我检查了所有可以find的预定义数组:
echo '<pre>'; echo "\n".'$GLOBALS'."\n"; var_dump($GLOBALS); echo "\n".'$_SERVER'."\n"; var_dump($_SERVER); echo "\n".'$_GET'."\n"; var_dump($_GET); echo "\n".'$_POST'."\n"; var_dump($_POST); echo "\n".'$_FILES'."\n"; var_dump($_FILES); echo "\n".'$_REQUEST'."\n"; var_dump($_REQUEST); echo "\n".'$_SESSION'."\n"; var_dump($_SESSION); echo "\n".'$_ENV'."\n"; var_dump($_ENV); echo "\n".'$_COOKIE'."\n"; var_dump($_COOKIE); echo "\n".'$php_errormsg'."\n"; var_dump($php_errormsg); echo "\n".'$HTTP_RAW_POST_DATA'."\n"; var_dump($HTTP_RAW_POST_DATA); echo "\n".'$http_response_header'."\n"; var_dump($http_response_header); echo "\n".'$argc'."\n"; var_dump($argc); echo "\n".'$argv'."\n"; var_dump($argv); echo '</pre>';
唯一显示PATH_INFO是$_SERVER :
var_dump($_SERVER); // ["PATH_INFO"]=> string(0) ""
但是我在nginx设置的值没有考虑到。
Q1:我需要configuration任何在nginx/php级别的fastcgi_param指令才能生效吗?
问题2: fastcgi_param指令是否被限制在一个预定义的参数列表中(例如,我可以设置PATH_INFO但不是我自己的自定义variables,比如FOO )?
问题3:如果是的Q2:有没有办法将自定义parameter passing给Nginx的PHP?
您可以通过fastcgi_param指令传递附加参数。 我敢肯定,因为我使用了这种funcionality。
我的示例nginxconfiguration
server { server_name localhost; include conf/defaults.conf; root /var/www; location ~* "\.php$" { fastcgi_param CRS "crs"; include conf/fastcgi-php.conf; } }
和phpinfo()输出的一部分:
... _SERVER["USER"] fcgi _SERVER["HOME"] /dev/null _SERVER["FCGI_ROLE"] RESPONDER _SERVER["REMOTE_USER"] no value _SERVER["CRS"] crs _SERVER["QUERY_STRING"] no value