Переменные Nginx похожи на SetEnv в Apache? - PullRequest
75 голосов
/ 11 ноября 2011

Я использую SetEnv в Apache, чтобы установить некоторые переменные в виртуальных хостах, которые я восстанавливаю в PHP, используя $_SERVER[the_variable].

Теперь я переключаюсь на Perl Catalyst и Nginx, но похоже, что директива env вNginx не то же самое.Это не работает.Как это сделать?

Вот фоновая картинка, на тот случай, если кто-то может предложить лучший подход, или моя предыдущая система не работает с Nginx.

  • Я использую то же самоеприложение для многих доменов.Все данные поступают из разных баз данных с одинаковой структурой.
  • Имя базы данных жестко задано для виртуального хоста в этой переменной среды.
  • Поскольку я знаю имя базы данных, все запросы отправляются насоответствующая база данных, с самого первого запроса.
  • Я могу иметь несколько доменов, использующих одну и ту же базу данных, просто включив одну и ту же переменную в директивы.

Ответы [ 4 ]

104 голосов
/ 30 ноября 2011
location / {
...
   fastcgi_param   APPLICATION_ENV  production;
   fastcgi_param   APPLICATION_CONFIG user;
...
}

но это для PHP-CGI

54 голосов
/ 11 ноября 2011

NGINX не управляет вашими внутренними процессами, как Apache, поэтому он не может влиять на их среду.Чтобы установить новую переменную $_SERVER PHP из NGINX, вам нужно добавить новую запись fastcgi_param вместе с остальными.Куда бы вы ни включили fastcgi_params или fastcgi.conf.

40 голосов
/ 21 октября 2013

Вы должны иметь в виду, что nginx не управляет php-процессами, как apache. Вы должны настроить либо php-fpm, либо php-cgi, полагаясь на то, что запускает php на вашем сервере.

PHP-CGI

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

PHP-FPM

location / {
    ...
    fastcgi_param APP_ENV production; 
    ...
}
8 голосов
/ 27 июня 2017

Сначала необходимо указать местоположение сокета fastcgi_pass , а затем каждый из параметров fastcgi_param . Вы также можете перечислить переменные в файле в папке конфигурации nginx, а затем включить этот файл. Файл включения обычно имеет имя 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;
...