我在Apache中使用SetEnv在虚拟主机中设置一些变量,我使用$_SERVER[the_variable]
在PHP中恢复。
现在我转而使用Perl Catalyst和Nginx,但看起来Nginx中的“env”指令并不相同。这是行不通的。如何实现?
以下是背景图片,以防万一有人可以提出更好的方法,或者我之前的系统无法与Nginx一起使用。
答案 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_params
或fastcgi.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;