客户端无法通过nginx反向代理连接(https)到WebSocket服务器

我们的用例是一个托pipe在Docker容器中的web应用程序。 这个容器有一个Web服务器和一个WebSocket服务器,这两个服务器都使用托pipe在另一个Docker容器中的nginx反向代理从客户端传递请求。

我们使用的是一个nginx反向代理,因为并不是所有的webapp实例都需要HTTPS,但是,如果需要HTTPS,我们需要一个服务器来接受SSL连接,而不需要修改webapp Docker容器中的代码。

websocket连接打开如下:

url={`wss://${this.props.root}websocket`}

其中${this.props.root}等同于example.com/ ,它根据托pipe服务器的域来进行更改。

反向代理通过将所有对服务器的请求传递给webapp的docker容器来处理所有请求

 location / { proxy_pass http://___APPLICATION_IP___:___APPLICATION_PORT___; proxy_http_version 1.1; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Upgrade $http_upgrade; proxy_redirect off; proxy_set_header Connection "upgrade"; proxy_read_timeout 60s; } 

然而,虽然经常性的请求(即通过普通的HTTP / GET传递的css和html数据)工作正常(我可以看到网站的用户界面),但是需要websocket的function却不起作用。 当我使用浏览器控制台时,它说:

Firefox can't establish a connection to the server at wss://{test-domain-omitted-here}/websocket.

任何想法,我们可能会错过什么?