Переменные Nginx, подобные SetEnv в Apache?



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



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



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




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

  • имя базы данных жестко закодировано для виртуального хоста в этой переменной среды.

  • как я знаю имя базы данных, все запросы идут в соответствующую базу данных, с самого первого запроса.

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

658   4  

4 ответов:

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

location / {
...
   fastcgi_param   APPLICATION_ENV  production;
   fastcgi_param   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; 
    ...
}

The 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;
        }

The fastcgi_params файл, расположенный в том же каталоге, что и nginx.конф часто смотрит вот так:

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;

Comments

    Ничего не найдено.