Apache에서 SetEnv를 사용하여 .NET을 사용하여 PHP에서 복구하는 가상 호스트의 일부 변수를 설정 $_SERVER[the_variable]
합니다.
이제 Perl Catalyst와 Nginx로 전환하고 있지만 Nginx의 “env”지시문이 동일하지 않은 것 같습니다. 작동하지 않습니다. 어떻게 이룰 수 있습니까?
누군가가 더 나은 접근 방식을 제안 할 수 있거나 이전 시스템이 Nginx에서 작동하지 않는 경우를 대비하여 배경 그림은 다음과 같습니다.
- 여러 도메인에 동일한 앱을 사용합니다. 모든 데이터는 동일한 구조의 다른 데이터베이스에서 가져옵니다.
- 데이터베이스 이름은 해당 환경 변수에서 가상 호스트에 하드 코딩됩니다.
- 데이터베이스 이름을 알기 때문에 모든 쿼리는 첫 번째 쿼리부터 적절한 데이터베이스로 이동합니다.
- 동일한 변수를 지시문에 포함하여 동일한 데이터베이스를 사용하여 여러 도메인을 가질 수 있습니다.
답변
NGINX는 아파치처럼 백엔드 프로세스를 관리하지 않으므로 환경에 영향을 미칠 수 없습니다. $_SERVER
NGINX에서 새 PHP 변수 를 설정하려면 fastcgi_param
나머지 항목과 함께 새 항목 을 추가해야 합니다. 어디든지 당신은 포함하고 fastcgi_params
나 fastcgi.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;