【问题标题】:nginx and proxying WebSocketsnginx 和代理 WebSockets
【发布时间】:2013-05-04 09:21:11
【问题描述】:

我正在尝试使用 nginx 代理 WebSocket + HTTP 流量。

我已阅读:http://nginx.org/en/docs/http/websocket.html

我的配置如下:

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

    sendfile        on;
    keepalive_timeout  65;

    gzip  on;

    map $http_upgrade $connection_upgrade {
      default upgrade;
      ''      close;
    }

    server {
      listen 80;
      server_name ourapp.com;

      location / {
        proxy_pass http://127.0.0.1:100;
        proxy_http_version 1.1;
        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;
        proxy_set_header   Upgrade          $http_upgrade;
        proxy_set_header   Connection       $connection_upgrade;
      }
    }
}

我有两个问题:

1) 连接每分钟关闭一次。

2) 我想在同一个端口上同时运行 HTTP 和 WS。该应用程序在本地运行良好,但如果我尝试将 HTTP 和 WS 放在同一个端口上并设置这个 nginx 代理,我会得到:

到 'ws://ourapp.com/ws' 的 WebSocket 连接失败:意外响应代码:200

加载应用程序 (HTTP) 似乎工作正常,但 WebSocket 连接失败。

【问题讨论】:

    标签: http nginx websocket


    【解决方案1】:

    问题1:至于连接一分钟死一次,我意识到这是nginx超时变量。我可以让我们的应用程序偶尔 ping 一次,也可以增加超时时间。我不确定是否应该将其设置为 0,我决定每分钟 ping 一次并将超时设置为 90 秒。 (keepalive_timeout)

    问题 2: 我使用 CloudFlare CDN 时出现了连接问题。禁用 CloudFlare 加速解决了这个问题。

    或者,我可以创建一个子域并将其设置为“未加速”并将其用于 WS。

    【讨论】:

      猜你喜欢
      • 2011-08-09
      • 2013-02-18
      • 1970-01-01
      • 1970-01-01
      • 2016-05-23
      • 2012-03-25
      • 1970-01-01
      • 2015-10-20
      • 2014-10-09
      相关资源
      最近更新 更多