我在ECS服务器上运行docker-nginx。我的nginx服务突然停止,因为其中一个服务器的proxy_pass
无法访问。错误如下:
[emerg] 1#1: host not found in upstream "dev-example.io" in /etc/nginx/conf.d/default.conf:988
我的配置文件如下:
server {
listen 80;
server_name test.com;
location / {
proxy_pass http://dev-exapmle.io:5016/;
proxy_redirect off;
##proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
server {
listen 80 default_server;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/log/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
我在配置文件中有很多服务器,即使一个服务器停机,我也需要运行nginx。有什么办法可以解决吗?
任何建议来解决这个问题将不胜感激。
5条答案
按热度按时间eoigrqb61#
仅仅添加一个解析器并不能解决我的问题。但我可以通过为主机使用变量来解决它。另外,我想在www.example.com上使用Docker的DNS更有意义127.0.0.11(这是一个固定的IP)。
范例:
我在this page上找到了变量的变通方法。
zlwx9yxi2#
包含以防止Nginx在您的网站关闭时崩溃,包含一个解析器指令,如下所示:
注意!使用公共DNS会在您的后端创建安全风险,因为您的DNS请求可能会被欺骗。如果这是一个问题,您应该将解析器指向安全的DNS服务器。
q7solyqu3#
这通常意味着您提供的上游服务器的dns名称无法解析。要测试它,请登录nginx服务器并尝试ping提供的上游服务器,看看名称解析是否正确完成,如果是Docker容器,请尝试
docker exec -it
以获取shell,然后尝试ping上游以测试名称解析。如果consianer停止尝试使用IP地址而不是DNS名称在您的服务器块。如果您想为该位置使用与主机系统不同的dns服务器,也可以使用resolver指令:
brccelvz4#
当使用nginx plus时,你也可以通过resolve在上游添加一个区域来解决这个问题。当你在你的电脑上使用这个测试时。当服务器some-server开始解析时,它将开始向其传递流量。
确保如上所述,在配置的其他部分放置一个解析器。对于docker,我使用解析器127.0.0.11 valid= 1 s;
tv6aics15#
我有同样的问题:
在
resolver
指令中包含一个变量可以解决所有问题:顺便说一下,我的服务器是NGINX/1.23.2,运行在Android ARMv7:)问候.