AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 666037
Accepted
Jonesome Reinstate Monica
Jonesome Reinstate Monica
Asked: 2015-02-09 19:37:37 +0800 CST2015-02-09 19:37:37 +0800 CST 2015-02-09 19:37:37 +0800 CST

nginx 1.7.9:反向代理 Web 套接字:在服务停止/服务重新启动时挂起,永不退出

  • 772

我们使用 nginx 对一对 websocket 服务器进行负载平衡,并且遇到了问题。

一旦将流量实际连接到 Web 套接字服务器,它就不会正常退出或关闭。例如 service nginx stop 或 nginx -s quit 或 nginx -s reload 会导致一个或多个工作进程永远报告“工作进程正在关闭”。

流程是:

  1. 使用下面的配置启动 nginx。
  2. 将流量传递到 nginx 端点(即使使用 Web 浏览器访问 443 端口并得到 404 错误也足够了)
  3. 使用服务控制或发送退出命令
  4. nginx 现在挂起。

我们在 centos v6 上运行 nginx

我们的编译选项和高级配置的详细信息:

    [root@nginx1 nginx]# nginx -V
    nginx version: nginx/1.7.9
    built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC)
    TLS SNI support enabled
    configure arguments: --user=nginx --group=nginx --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_gzip_static_module 
--with-http_ssl_module --add-module=/opt/nginx_upstream_check_module-master/

我们的配置如下。我们如何去追这个呢?现在我们被迫硬杀/重启 nginx 来更新配置。

worker_processes  2;

error_log  logs/error.log;

events {
    worker_connections  20000;
}

worker_rlimit_nofile    40000;

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    upstream websocketserver {
        server 192.168.2.16:3842 max_fails=1 fail_timeout=60s;
        server 192.168.2.19:3842 max_fails=1 fail_timeout=60s;
    }

    server {
        listen 192.168.2.28:80;

    location / {

        proxy_pass http://websocketserver;

        proxy_next_upstream    error timeout invalid_header http_500;
        proxy_connect_timeout  2;
        proxy_read_timeout      86400;

        # WebSocket support (nginx 1.4)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        }

        location / {
            deny all;
            return 404;
        }       

    }
}
nginx
  • 3 3 个回答
  • 3138 Views

3 个回答

  • Voted
  1. Best Answer
    Cedric Knight
    2015-02-22T10:08:14+08:002015-02-22T10:08:14+08:00

    可能netstat并且tcpdump对调试很有用lsof- 工作进程是否仍然连接并交换数据?我注意到你proxy_read_timeout是一天而不是默认的 60 年代,我想知道这是否重要。这听起来像一个 nginx 错误,可能有关 ZLIB 压缩和 keepalive 的这篇文章是相关的:http: //forum.nginx.org/read.php?2,170139,209671

    • 2
  2. Phillip Dean
    2015-02-11T06:50:17+08:002015-02-11T06:50:17+08:00

    我要做的是使用 附加到 nginx 进程strace,然后尝试将其关闭并检查它strace以查看它挂起的文件描述符。使用此信息lsof来跟踪它正在等待的文件描述符并从那里开始。我的猜测是它可能是您的上游服务器之一导致了这种情况。

    • 0
  3. David Wasser
    2015-02-22T20:11:23+08:002015-02-22T20:11:23+08:00

    如果它是像浏览器 websocket 协议这样的 websocket 服务器,它需要将 websocket 关闭发送到连接的浏览器并关闭套接字。位于 192.168.2.*:3842 的应用程序将能够这样做。因此,您需要向该应用程序发送一个信号,告诉它向其连接的 websocket 发送关闭。

    • 0

相关问题

  • Gzip 与反向代理缓存

  • nginx 作为代理的行为

  • Nginx 学习资源 [关闭]

  • 提供 70,000 个静态文件 (jpg) 的最佳方式?

  • 在 Apache、LightTPD 和 Nginx Web 服务器上提供 PHP 5.x 应用程序的现状?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve