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

Xeo*_*oss 9 nginx web-server environment-variables virtualhost

我正在启动一个项目,该项目使用环境变量来设置数据库连接和其他一些事情。(他们不想使用配置文件,因为人们粗心大意并覆盖了它们)。

无论如何,我正在使用 nginx,虽然它支持 env - 它似乎并没有很好支持它。您不能在每个服务器块的基础上设置 env 值。换句话说,这行不通:

server {
    listen 80;
    server_name domain;
    env FOO = "bar";
}
Run Code Online (Sandbox Code Playgroud)

你必须这样做:

env FOO = "bar";

http {
    server {
        listen 80;
        server_name domain;
    }
}
Run Code Online (Sandbox Code Playgroud)

这意味着我不能拥有特定于 vhost 的值。所以我必须为每个站点创建一个完整的 vhost 配置,并且只激活我目前想要的一个,以便正确设置值。

有没有办法解决这个问题?

Xeo*_*oss 14

事实证明,如果您使用的是 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";
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 但是,有没有办法动态设置`server_name`?由于它是在 OS X 上运行的虚拟主机,因此 nginx 主机具有不同的 IP,因此无法解析。 (2认同)