패스 Nginx 1.2.4
와 PHP-FPM 5.4.8
함께 사용 fastcgi
하고에 맞춤 매개 변수를 전달하려고합니다 PHP
. 지금까지 찾은 옵션은 다음과 같습니다.
-
은 USING
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에 예인 경우 : 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 스크립트의 요청 헤더에서 해당 값을 읽을 수 있습니다.