Nginx变量类似于Apache中的SetEnv?

时间:2011-11-11 19:27:46

标签: apache perl nginx catalyst

我在Apache中使用SetEnv在虚拟主机中设置一些变量,我使用$_SERVER[the_variable]在PHP中恢复。

现在我转而使用Perl Catalyst和Nginx,但看起来Nginx中的“env”指令并不相同。这是行不通的。如何实现?

以下是背景图片,以防万一有人可以提出更好的方法,或者我之前的系统无法与Nginx一起使用。

  • 我对很多域使用相同的应用程序。所有数据都来自具有相同结构的不同数据库。
  • 数据库名称在该环境变量中硬编码到虚拟主机。
  • 据我所知,数据库名称从第一个查询开始,所有查询都会转到相应的数据库。
  • 我可以使用相同的数据库拥有多个域,只需在指令中包含相同的变量。

4 个答案:

答案 0 :(得分:103)

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

但它适用于PHP-CGI

答案 1 :(得分:52)

NGINX不像apache那样管理你的后端进程,所以它不会影响他们的环境。要从NGINX设置新的$_SERVER PHP变量,您需要添加一个新的fastcgi_param条目以及其余条目。无论您在何处加入fastcgi_paramsfastcgi.conf

答案 2 :(得分:40)

你应该记住,nginx不像apache那样管理php进程。您应该配置php-fpm或php-cgi,依赖于在您的服务器上运行php的内容。

<强> PHP-CGI

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

<强> PHP-FPM

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

答案 3 :(得分:8)

首先需要 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;
        }

与nginx.conf位于同一目录中的 fastcgi_params 文件通常如下所示:

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;