如何在Nginx中设置服务器特定的ENV值?


9

我正在启动一个使用环境变量来设置数据库连接和其他几件事的项目。(他们不想使用配置文件,因为人们不小心会覆盖它们)。

无论如何,我正在使用nginx,虽然它支持env-似乎对其支持还不够好。您不能基于每个服务器块设置env值。换句话说,这是行不通的:

server {
    listen 80;
    server_name domain;
    env FOO = "bar";
}

您必须这样做:

env FOO = "bar";

http {
    server {
        listen 80;
        server_name domain;
    }
}

这意味着我不能具有特定于虚拟主机的值。因此,我必须为每个站点创建一个完整的vhost配置,并仅激活我现在想要的那个,以便正确设置该值。

有什么办法可以解决此问题?


Nginx配置不像应用程序的配置一样容易被覆盖吗?它使用什么模块将请求提供给应用程序?
Shane Madden

@ ShaneMadden,nginx配置不是项目的一部分,但必须在每个服务器上手动创建。因此它不会被覆盖。我发布的是完整的配置-我们也只是使用标准fastcgi_pass将请求转发到ruby / php。
Xeoncross

Answers:


13

事实证明,如果您使用的是fastcgi,则可以通过传递来自fastcgi_param的值来解决此问题。

server {
    listen 80;
    server_name domain;

    # Pass PHP scripts to php-fastcgi listening on port 9000
    location ~ path/to/it {
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param FOO "bar";
    }
}

是的,这就是我要建议的。击败我吧!(我今天没有投票,我将对这个答案稍加投票)
Shane Madden

@ShaneMadden也许您可以帮助
Xeoncross

2
有什么方法可以server_name动态设置吗?由于它是在OS X上运行的虚拟主机,因此nginx主机具有不同的IP,因此无法解析。
塔可
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.