前言:我正在尝试实施蓝绿部署。
内容如下nginx.conf
:
http {
upstream backend {
keepalive_timeout 65;
server django_blue:8000 fail_timeout=5s max_fails=1;
server django_green:8000 fail_timeout=5s max_fails=1;
}
server {
listen 80 default_server;
location / {
proxy_pass http://backend;
proxy_redirect off;
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-Host $host;
proxy_set_header X-Forwarded-Proto https;
proxy_read_timeout 2s;
client_max_body_size 20m;
}
}
}
如果
django_blue
和django_green
都启动并运行,则一切运行良好:nginx 在 Roundrobin 中正确执行了 LB。如果我关闭其中一个 - 比如说,
django_green
然后继续在 Chrome 上进行网络请求,如果循环给出关闭的服务器,django_green
它会等待 1 分钟(正好 60 秒),然后使用 回复浏览器504 Gateway Error
。
我有两个问题:
- 为什么它要等待 1 分钟而没有
fail_timeout
值? - 为什么它不简单地用指令中的另一个可用服务器进行回复
upstream
?
答案1
我刚刚发现,这是一个proxy_connect_timeout
问题。
所以我刚刚补充道:
proxy_connect_timeout 2s;
阻止location / {}