16

我正在尝试使用 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 代理,我会得到:

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

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

4

1 回答 1

13

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

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

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

于 2013-05-10T11:44:18.060 回答