Я использую SetEnv в Apache для установки некоторых переменных в virtualhosts, которые я восстанавливаю на PHP, используя $_SERVER[the_variable]
.
Теперь я перехожу к Perl Catalyst и Nginx, но похоже, что директива env в Nginx не то же самое. Это не работает. Как это можно сделать?
Вот фоновое изображение, на всякий случай, если кто-то может предложить лучший подход, или моя предыдущая система не работает с Nginx.
NGINX не управляет вашими backend-процессами, такими как apache, поэтому он не может повлиять на их среду. Чтобы установить новую переменную PHP $_SERVER
из NGINX, вам нужно добавить новую запись fastcgi_param
вместе с остальными. Где бы вы ни включали fastcgi_params
или fastcgi.conf
.
location / {
...
fastcgi_param APPLICATION_ENV production; #APPLICATION_ENV = production
fastcgi_param APPLICATION_CONFIG user; #APPLICATION_CONFIG = user
...
}
но это для PHP-CGI
Вы должны иметь в виду, что nginx не управляет php-процессами, такими как apache. Вы должны настроить либо php-fpm, либо php-cgi, полагаясь на то, что запускает php на вашем сервере.
PHP-CGI
...
env[APP_ENV] = production
...
PHP-FPM
location / {
...
fastcgi_param APP_ENV production;
...
}
Сначала необходимо найти расположение сокета fastcgi_pass, затем каждый из параметров fastcgi_param. Вы также можете перечислить переменные в файле в папке конфигурации nginx, а затем включить этот файл. Файл include обычно имеет имя 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;