我们在Docker的通用域下有多个Rails应用程序,并且我们使用nginx将请求定向到特定的应用程序。
our_dev_server.com/foo # proxies to foo app
our_dev_server.com/bar # proxies to bar
配置看起来像这样:
upstream foo {
server foo:3000;
}
upstream bar {
server bar:3000;
}
# and about 10 more...
server {
listen *:80 default_server;
server_name our_dev_server.com;
location /foo {
# this is specific to asset management in rails dev
rewrite ^/foo/assets(/.*)$ /assets/$1 break;
rewrite ^/foo(/.*)$ /foo/$1 break;
proxy_pass http://foo;
}
location /bar {
rewrite ^/bar/assets(/.*)$ /assets/$1 break;
rewrite ^/bar(/.*)$ /bar/$1 break;
proxy_pass http://bar;
}
# and about 10 more...
}
如果这些应用之一未启动,则nginx失败并停止:
host not found in upstream "bar:3000" in /etc/nginx/conf.d/nginx.conf:6
我们不需要全部启动,否则nginx失败。如何使Nginx忽略失败的上游?
如果您可以使用IP,则可以正常启动。在您的情况下,可以使用
—
贾斯汀
resolver
(nginx.org/en/docs/http/ngx_http_core_module.html#resolver)吗?
@Justin我们将每个应用程序都放在单独的容器中,nginx也是如此。将它们与docker链接
—
Morozov
@Justin启动顺序很好,nginx在其他应用程序之后启动。我们只想运行其中的一部分:)
—
Morozov
我有一个类似的设置(带有应用程序容器的Nginx容器)。我们创建了一个Nginx图像,其中包含一个
—
Justin
proxy.sh
读取环境变量并动态添加的脚本upstream
为每个项,然后启动Nginx。这非常有用,因为当我们运行代理容器时,我们可以在运行时传递所需的上游。您可以执行类似的操作以在启动时启用/禁用某些上游(或像我的设置一样在运行时添加所需的
upstream
块内的主机在运行时无法解析,则Nginx将退出并显示上述错误...