![如何从 Nginx 传递自定义参数给 PHP?](https://linux22.com/image/600668/%E5%A6%82%E4%BD%95%E4%BB%8E%20Nginx%20%E4%BC%A0%E9%80%92%E8%87%AA%E5%AE%9A%E4%B9%89%E5%8F%82%E6%95%B0%E7%BB%99%20PHP%EF%BC%9F.png)
我正在与 pass 结合使用并Nginx 1.2.4
尝试将自定义参数传递给。以下是我迄今为止找到的选项:PHP-FPM 5.4.8
fastcgi
PHP
使用
env
指令在 中设置环境变量,nginx
并使用getenv()
或$_ENV
从 中获取它PHP
。问题是env
仅在main
语境server
而我需要在上下文中设置参数。使用
fastcgi_param
为此设计的指令。
我曾尝试使用以下方法更改某些参数的值fastcgi_param
,但没有成功:
nginx的:
fastcgi_param PATH_INFO "/var/tmp";
PHP的:
我检查了我能找到的所有预定义数组:
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
没有被考虑在内。
nginx/php
Q1:我需要在级别上配置任何东西才能fastcgi_param
使指令生效吗?
Q2:该fastcgi_param
指令是否仅限于预定义的参数列表(例如,我可以设置PATH_INFO
但不能设置我自己的自定义变量,例如FOO
)?
Q3:如果对 Q2 的回答是肯定的,那么有没有办法将自定义参数从 Nginx 传递给 PHP?
答案1
您可以通过 fastcgi_param 指令传递其他参数。我很确定,因为我使用过此功能。
我的示例 nginx 配置
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
答案2
您可以通过在请求标头中传递自定义变量来修改请求,例如:
proxy_set_header Variable-name-here Value-here;
然后您可以从 PHP 脚本的请求标头中读取这些值。