Nginx变量类似于Apache中的SetEnv?

MIg*_*ele 77 apache perl nginx catalyst

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

现在我转而使用Perl Catalyst和Nginx,但似乎Nginx中的"env"指令并不相同.这是行不通的.如何实现?

这是背景图片,以防万一有人可以建议更好的方法或我以前的系统不能与Nginx一起使用.

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

小智 111

location / {
...
   fastcgi_param   APPLICATION_ENV  production;
   fastcgi_param   APPLICATION_CONFIG user;
...
}
Run Code Online (Sandbox Code Playgroud)

但它适用于PHP-CGI

  • 我想知道右边评论的目的是什么:-) (22认同)
  • 然后他失败得非常可怕,因为这不是如何在Apache中定义环境变量的. (5认同)

kol*_*ack 54

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


Ole*_*leg 40

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

PHP-CGI

...
env[APP_ENV] = production
...
Run Code Online (Sandbox Code Playgroud)

PHP-FPM

location / {
    ...
    fastcgi_param APP_ENV production; 
    ...
}
Run Code Online (Sandbox Code Playgroud)


i_a*_*i_a 9

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;
        }
Run Code Online (Sandbox Code Playgroud)

与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;
Run Code Online (Sandbox Code Playgroud)