无法使用Nginx反向代理连接到Websocket Server

胆固醇

我想用反向代理设置一个websocket服务器。为此,我使用python中的简单websocket服务器和nginx反向代理创建了一个docker-compose。

设定:

在此处输入图片说明

docker-compose.yml:

version: '2.4'
services: 
    wsserver:
        restart: always
        ports: 
            - 8765:8765
        build: 
            context: ./server
            dockerfile: Dockerfile   
    ngproxy:
        image: nginx
        ports: 
            - 8020:80
            - 5000:5000
        restart: always
        depends_on:
            - wsserver
        volumes:
            - ./nginx/nginx.conf:/etc/nginx/conf.conf

nginx.conf:

http {
    map $http_upgrade $connection_upgrade {
        default upgrade;
        '' close;
    }
 
    upstream websocket {
        server  wsserver:8765;
    }
 
    server {
        listen 5000;

        location / {
            proxy_pass http://websocket;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
        }
    }
}

Websocket服务器:

Dockerfile:

FROM python:3
RUN pip install websockets
RUN pip install asyncio
COPY server.py /
CMD [ "python", "./server.py" ]

server.py:

import asyncio
import websockets
import os


async def echo(websocket, path):
    async for message in websocket:
        print(message)
        await websocket.send(message)


asyncio.get_event_loop().run_until_complete(
    websockets.serve(echo, '0.0.0.0', 8765))
asyncio.get_event_loop().run_forever()

简单的ws客户端,可帮助运行测试(我也使用了Chrome扩展程序):

client.py:

import asyncio
import websockets


async def hello(uri):
    async with websockets.connect(uri) as websocket:
        await websocket.send("Hello world!")
        resp = await websocket.recv()
        print(resp)


asyncio.get_event_loop().run_until_complete(
    hello('ws://localhost:5000'))
# Without reverse proxy -> ws://localhost:8765

问题:

当我尝试连接(使用客户端或使用Chrome扩展程序)时,出现以下错误:

WebSocket connection to 'ws://localhost:5000/' failed: Connection closed before receiving a handshake response

在此处输入图片说明

我的步骤有什么问题吗?

更多信息:

谢谢!

胆固醇

经过一番研究之后,我终于找到了问题所在:我将本地nginx配置映射到了容器上的错误文件。

所以要修复它,请更改我的docker-compose.yml中的音量

从:

volumes:
            - ./nginx/nginx.conf:/etc/nginx/conf.conf

至:

volumes:
            - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro

并且还从nginx.conf中删除了de http:

nginx.conf

 map $http_upgrade $connection_upgrade {
        default upgrade;
        '' close;
    }
 
    upstream websocket {
        server  wsserver:8765;
    }
 
    server {
        listen 5000;

        location / {
            proxy_pass http://websocket;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
        }
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法远程连接到SQL Server实例

来自分类Dev

无法连接到Sql Server 2012

来自分类Dev

无法使用jTDS连接到SQL Server

来自分类Dev

无法使用PYODBC连接到网络外部的远程SQL Server

来自分类Dev

无法直接从Android连接到SQL Server

来自分类Dev

无法使用JDBC连接到Sql Server数据库

来自分类Dev

PyOdbc无法连接到SQL Server实例

来自分类Dev

无法从PHP连接到SQL Server

来自分类Dev

无法连接到远程MySQL Server(10061)

来自分类Dev

无法使用PHP连接到SQL Server

来自分类Dev

无法从Docker容器连接到SQL Server

来自分类Dev

无法通过ODBC连接到SQL Server

来自分类Dev

无法使用Express Server连接到socket.io

来自分类Dev

SSMS无法连接到SQL Server 2019

来自分类Dev

无法连接到SQL Server 2012

来自分类Dev

连接到VPN时无法连接到本地Sql Server

来自分类Dev

无法将tsql连接到SQL Server

来自分类Dev

SQL Server 2008无法连接到实例

来自分类Dev

Windows Server 2012上的SNMP扩展代理无法连接到需要数据的端口

来自分类Dev

无法从RStudio连接到Microsoft SQL Server

来自分类Dev

DBVisualizer无法使用jTDS连接到SQL Server

来自分类Dev

无法使用IP地址连接到MySQL Server

来自分类Dev

无法连接到MSSQL Server

来自分类Dev

使用JavaScript将Websocket连接到Qt Fortune Server

来自分类Dev

无法使用PHP连接到SQL Server

来自分类Dev

无法使用Ansible使用域帐户连接到Windows Server

来自分类Dev

无法使用 IP 连接到 SQL Server

来自分类Dev

无法使用java连接到sql server

来自分类Dev

无法使用 Spring JDBC 通过 SSL 连接到 SQL Server