我目前正在使用Nginx配置来将我的一些Docker容器分组到子域中。这些容器中的一些没有永久运行,并且阻止nginx启动(错误为host not found in upstream "somecontainer:5000" in /etc/nginx/conf.d/default.conf:48
),因为上游中定义的主机不可访问。有没有办法设置一个备用上游服务器,以防第一个服务器没有运行?
当前配置如下所示:
upstream somecontainer {
server somecontainer:5000;
# here i need something like: if host is unreachable
# server fallbackserver:5000
}
server {
listen 443 ssl http2;
server_name some.subdomain.com;
root /public_html/;
client_max_body_size 16384m;
ssl on;
server_tokens off;
ssl_certificate sslstuff;
ssl_certificate_key sslstuff;
ssl_buffer_size 8k;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
location / {
proxy_pass http://somecontainer;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 900;
}
}
1条答案
按热度按时间pkwftd7m1#
不幸的是,这是因为Nginx的设计。
您可以在
proxy_pass
中使用变量,该变量将在运行时解析,因此在nginx加载时不会出现此类错误:但上述解决方案的缺点是,你不能利用nginx
upstream
,如指定负载平衡算法或加权平衡...另外,如果上游和动态服务初始化都需要,你必须修补nginx。我有一个补丁,它改变了Nginx的设计,在这里讨论过,我在生产环境中使用了一段时间。如果修补对你来说不是问题,你可以检查它https://github.com/ZigzagAK/ngx_dynamic_upstream/issues/8#issuecomment-814702336