Php

如何從 Nginx 將自定義參數傳遞給 PHP?

  • May 29, 2019

我正在與passNginx 1.2.4結合使用並嘗試將自定義參數傳遞給. 以下是我到目前為止找到的選項:PHP-FPM 5.4.8``fastcgi``PHP

  • 使用該env指令在 in 中設置一個環境變數,nginx並使用getenv()$_ENVPHP. 問題是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沒有考慮在內。

Q1:我需要在nginx/php級別上配置任何東西才能使fastcgi_param指令生效嗎?

Q2:fastcgi_param指令是否僅限於預定義的參數列表(例如,我可以設置PATH_INFO但不能設置自己的自定義變數,例如FOO)?

Q3:如果是 Q2:有沒有辦法從 Nginx 將自定義參數傳遞給 PHP?

您可以通過 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

您可以通過在請求標頭中傳遞自定義變數來修改請求,例如:

proxy_set_header Variable-name-here Value-here;

然後您可以從 PHP 腳本中的請求標頭中讀取這些值。

引用自:https://serverfault.com/questions/448982