首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Nginx热配置重新加载(SIGHUP)期间,正在运行的HTTP请求失败

在Nginx热配置重新加载(SIGHUP)期间,正在运行的HTTP请求失败
EN

Stack Overflow用户
提问于 2015-06-01 14:40:07
回答 1查看 1.3K关注 0票数 3

我们最近从HAProxy迁移到了Nginx,因为它支持真正的零停机配置重新加载。然而,在部署期间,我们偶尔会从监视系统中得到502和504个错误。在这方面,我一直能够复制502和504错误如下。我认为这是Nginx处理飞行中请求的一个错误,但我想问问社区,以防我遗漏了一些显而易见的东西。

注意,Nginx的设置如下:*Ubuntu14.04* Nginx版本1.9.1 * HTTP侦听器的配置:

代码语言:javascript
运行
复制
   map $http_upgrade $connection_upgrade {
     default upgrade;
     ''      close;
   }

   server {
    listen 8080;
     # pass on real client's IP
    proxy_set_header  X-Real-IP         $remote_addr;
    proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
     access_log /var/log/nginx/access.ws-8080.log combined;

     location / {
      proxy_pass http://server-ws-8080;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;
    }
  }

  upstream server-ws-8080 {
    least_conn;
    server 172.17.0.51:8080 max_fails=0;
  }
  1. 它监听的HTTP端口上的Nginx服务器的Telnet。
  2. 向上游服务器发送HTTP/1.1请求(172.17.0.51): 获取/health HTTP/1.1主机:本地主机连接:保持活动

此请求成功,响应有效。

  1. 启动一个新的HTTP/1.1请求,但不完成请求,即使用telnet发送以下行: 获取/health HTTP/1.1
  2. 虽然该请求现在正在有效运行,因为它还没有完成,而Nginx正在等待请求完成,请使用SIGHUP信号重新配置Nginx。SIGHUP信号之前的配置的唯一区别是上游服务器已经改变,也就是说,我们有意地希望所有新请求都转到新的上游服务器。
  3. 终止旧的上游服务器172.17.0.51
  4. 完成上面第3点开始的在飞行中HTTP/1.1请求,并: 主机:本地主机连接:保持-活动
  5. 如果旧的上游服务器拒绝请求,Nginx将一致响应502,如果该IP和端口没有响应,Nginx将使用504响应。

我认为这种行为是不正确的,因为Nginx一旦收到完整的请求,就应该将请求定向到当前可用的上游服务器。然而,Nginx似乎正在决定在请求完成之前将请求发送到哪个上游服务器,并以此将请求定向到不再存在的服务器。

任何关于如何解决这个问题的建议都是非常有帮助的!

EN

回答 1

Stack Overflow用户

发布于 2015-10-07 19:49:40

proxy_next_upstream指令可能完成您正在寻找的任务。

upstream

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30576404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档