[apache] Apache의 SetEnv와 유사한 Nginx 변수?

Apache에서 SetEnv를 사용하여 .NET을 사용하여 PHP에서 복구하는 가상 호스트의 일부 변수를 설정 $_SERVER[the_variable]합니다.

이제 Perl Catalyst와 Nginx로 전환하고 있지만 Nginx의 “env”지시문이 동일하지 않은 것 같습니다. 작동하지 않습니다. 어떻게 이룰 수 있습니까?

누군가가 더 나은 접근 방식을 제안 할 수 있거나 이전 시스템이 Nginx에서 작동하지 않는 경우를 대비하여 배경 그림은 다음과 같습니다.

  • 여러 도메인에 동일한 앱을 사용합니다. 모든 데이터는 동일한 구조의 다른 데이터베이스에서 가져옵니다.
  • 데이터베이스 이름은 해당 환경 변수에서 가상 호스트에 하드 코딩됩니다.
  • 데이터베이스 이름을 알기 때문에 모든 쿼리는 첫 번째 쿼리부터 적절한 데이터베이스로 이동합니다.
  • 동일한 변수를 지시문에 포함하여 동일한 데이터베이스를 사용하여 여러 도메인을 가질 수 있습니다.



답변

NGINX는 아파치처럼 백엔드 프로세스를 관리하지 않으므로 환경에 영향을 미칠 수 없습니다. $_SERVERNGINX에서 새 PHP 변수 를 설정하려면 fastcgi_param나머지 항목과 함께 새 항목 을 추가해야 합니다. 어디든지 당신은 포함하고 fastcgi_paramsfastcgi.conf.


답변

location / {
...
   fastcgi_param   APPLICATION_ENV  production;
   fastcgi_param   APPLICATION_CONFIG user;
...
}

하지만 PHP-CGI 용입니다.


답변

nginx는 아파치처럼 PHP 프로세스를 관리하지 않는다는 것을 명심해야합니다. 서버에서 php를 실행하는 것에 의존하여 php-fpm 또는 php-cgi를 구성해야합니다.

php-cgi

...
env[APP_ENV] = production
...

php-fpm

location / {
    ...
    fastcgi_param APP_ENV production;
    ...
}


답변

fastcgi_pass의 소켓 위치는 먼저 각 가야합니다 fastcgi_param의 매개 변수를. nginx config 폴더에있는 파일의 변수를 나열한 다음 해당 파일을 포함 할 수도 있습니다. 포함 파일의 이름은 일반적으로 fastcgi_params 입니다. 환경 매개 변수는 PHP 처리 블록에 쉽게 추가 할 수 있습니다.

        location ~ \.php$ {
            fastcgi_pass     unix:/your_sock_location/nginxFastCGI.sock;
            fastcgi_param    SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param    APP_ENV production;
            include          fastcgi_params;
        }

fastcgi_params는 nginx.conf은 종종 다음과 같습니다과 같은 디렉토리에있는 파일 :

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;


답변