Nginx에서 PHP로 사용자 정의 매개 변수를 전달하는 방법은 무엇입니까?


10

패스 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로 커스텀 파라미터를 전달하는 방법이 있습니까?

답변:


14

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

나는이 fastcgi.conffastcgi_params있지만 fastcgi-php.conf: 당신은 어디에서 얻었 는가? pastebin을 통해 공유 하시겠습니까?
Max

그것은 내 특정의 설정입니다하지만 마법은 없습니다 : fastcgi_pass 127.0.0.1:1028; fastcgi_index index.php; include conf/fastcgi.conf; 및 conf의 / fastcgi.conf는 FastCGI를 요구 PARAMS 및 설정의 나머지 부분을 포함
르지 Księżyk

내가 생각할 수있는 유일한 것은 컴파일 할 때 conf에 무언가를 포함하는 것을 잊었다는 것입니다 nginx. 반면에, 나는 nginx과거에 컴파일 할 때 것들을 포함하는 것을 잊어 버렸지 만, nginx내가 사용하고있는 몇 가지 지시문에 대해 알지 못했다고 말하기를 거부 할 것입니다. 여기에는 불만이 없지만 아직 fastcgi_param작동하지 않습니다. (원래 ubuntu nginx패키지를 사용 해보고 어떻게 진행되는지 살펴 보겠습니다.
Max

예, 기본 ubuntu nginx패키지로 작업하고 있습니다 .
Max

@ user64204 이것은 분명히 구성에 문제가 있었고 우분투 패키지는 일부 구성 파일을 덮어 썼습니다. 그러나 전체 구성을 보여주지 않았으므로 실제로 문제가 무엇인지 확인할 방법이 없습니다.
VBart

0

요청 헤더에 맞춤 변수를 전달하여 요청을 수정할 수 있습니다 (예 :

proxy_set_header Variable-name-here Value-here;

그런 다음 PHP 스크립트의 요청 헤더에서 해당 값을 읽을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.