я использую 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
не принимается во внимание.
Q1: Нужно ли мне что-нибудь настраивать на nginx/php
уровень для fastcgi_param
директива вступит в силу?
Q2: Является ли fastcgi_param
директива, ограниченная предопределенным списком параметров (например, я могу установить PATH_INFO
но не мои собственные переменные, такие как FOO
)?
Q3: Если да, то Q2: есть ли способ передать пользовательские параметры в PHP из Nginx?
Вы можете передать дополнительные параметры через директиву 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-скрипте.