如何从 Nginx 传递自定义参数给 PHP?

如何从 Nginx 传递自定义参数给 PHP?

我正在与 pass 结合使用并Nginx 1.2.4尝试将自定义参数传递给。以下是我迄今为止找到的选项:PHP-FPM 5.4.8fastcgiPHP

  • 使用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/phpQ1:我需要在级别上配置任何东西才能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 脚本的请求标头中读取这些值。

相关内容