Nginx에서 PHP로 사용자 정의 매개 변수를 전달하는 방법은 무엇입니까? fastcgi_param했지만 실패했습니다. nginx : fastcgi_param PATH_INFO “/var/tmp”; PHP : 찾을

패스 Nginx 1.2.4PHP-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 스크립트의 요청 헤더에서 해당 값을 읽을 수 있습니다.