我的服务器是运行centos的云服务器,并提供一些网页。
这些网页可以分为3个主要类别,即我的作业,我的小项目和大项目。
为了有效管理它们,我决定将它们移到docker容器中。结构如下:
pip install --upgrade wand
我尝试使用nginx侦听物理机上的端口80并将代理传递请求发送到我的容器,并将我的容器中的nginx代理传递请求发送到我的后端服务器。在这种情况下,除了websocket之外,其他所有东西都可以正常工作。可以加载网页,可以响应对后端服务器的Ajax请求,但是当涉及websocket时,后端服务器可以接收,升级和保留它,但是直到nginx关闭连接并出现错误之前,浏览器无法获得任何响应超过时间后,代码504。
当我绑定容器80的端口80而不是在物理机上使用nginx代理时,一切正常。
我认为这与标头无关,因为我在升级标头之前先用代码设置了标头。
我不知道为什么,有人可以帮助我吗?
这是我的配置:
This is my plan but websocket can't work on this setup
port 80---Nginx
|
|-another port--container port 80-nginx--static files
| |--container port--back end server
|-another port ....
......
################################################################################
Websocket works fine on this setup
physical port -- container port -- nginx -- static files
|--container port--back end server
答案 0 :(得分:0)
我没有使用proxy_set_header将标头传递到后端服务器。相反,我尝试使后端服务器将http请求升级到websocket,而不管标头。 当我仅使用一个Nginx代理时,它就可以工作。但是在这种情况下,第二个nginx将无法意识到这是一个websocket连接。因此它不起作用。
因此有必要使用proxy_set_headr。