WebSocket握手期间出错:缺少“升级”标头

时间:2019-03-03 15:52:45

标签: nginx

我有一个IIS网站,用于启动浏览器和服务器之间的websocket连接。该URL看起来像这样:http://stream.mydomain.com/h264.html?serverid=192.168.1.52。显然,无法从外部进行此连接,因此我正在尝试使用NGinx允许这样做。我有一个名为streams.mydomain.com的子域,并且我尝试根据路径进行重新路由,所以我的新URL看起来像http://stream.mydomain.com/h264.html?serverid=streams.mydomain.com/101。我尝试了几种路线,包括proxy_pass,这会导致意外的响应。目前,我正在尝试return,但仍然遇到标题问题。具体来说,这是指标题不存在,即使我明确包含了它,它也显示在Chrome的请求中。

这是我的配置:

server {
    listen      *;
    server_name streams.mydomain.net;
    location /101/ {
        add_header  'Connection'    'Upgrade';
        add_header  'Upgrade'       websocket;
        return      101             $scheme://192.168.1.52;
    }
}

这是我得到的错误:

Error during WebSocket handshake: 'Upgrade' header is missing

这是Chrome调试工具中的请求的屏幕截图,在我看来似乎显示了“ missing”标头:

enter image description here

这是使用内部网络上的本地IP(没有NGinx)的工作请求的屏幕截图:

enter image description here

1 个答案:

答案 0 :(得分:0)

我不能完全按照路线完成我想要的,但这是我必须采用的解决方案:

http {
    server {
        listen      80;
        server_name server101.domain.com;
        location / {
            proxy_http_version  1.1;
            proxy_set_header    Connection  "Upgrade";
            proxy_set_header    Upgrade     $http_upgrade;
            proxy_pass          $scheme://10.1.5.98:80;
        }
    }
}

我仍然想找出某天如何做servers.domain.com/101。