Nginx с веб-розеткой. Проблема с отправкой любых данных клиентом websocket. (110: истекло время соединения) при обновлении прокси-соединения) - PullRequest
0 голосов
/ 03 марта 2020

Я использую веб-сокеты для своего проекта. Я использую python aiohttp для сервера и клиента. Локально и по ngrok все работало отлично. Но я столкнулся с некоторой проблемой, когда я поставил его на свой сервер с nginx.

Я сделал все в соответствии с инструкциями здесь https://www.nginx.com/blog/websocket-nginx/

map $http_upgrade $connection_upgrade {
     default upgrade;
     '' close;
        }
server {
        server_name example.com;
        listen 80;
        root /var/www/html;
        error_log /var/log/nginx/error.log debug;

        ...

        location /ws {
                include proxy_params;
                proxy_pass http://127.0.0.1:5402/ws;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection $connection_upgrade;
                proxy_set_header Host $host;
                }
}

Когда Я подключился к своему example.com/ws, он работает, как и планировалось. Я получил от своего сервера веб-сокетов следующую информацию:

<Request GET /ws >
<WebSocketResponse Switching Protocols GET /ws > #HTTP 101 Switching Protocols

Nginx В журналах показано следующее:

    GET /ws HTTP/1.0
    Host: example.com
    X-Real-IP: ip
    X-Forwarded-For: ip
    X-Forwarded-Proto: http
    Upgrade: WebSocket
    Connection: upgrade
    Sec-WebSocket-Version: 13
    Sec-WebSocket-Key: 8LiAQ/oYM6PCsJ60brbQww==
    Accept: */*
    Accept-Encoding: gzip, deflate
    User-Agent: Python/3.7 aiohttp/3.6.2
    HTTP/1.1 101 Switching Protocols


    Server: nginx/1.16.1
    Date: Tue, 03 Mar 2020 16:59:49 GMT
    Content-Type: application/octet-stream
    Connection: upgrade
    Upgrade: websocket
    Sec-WebSocket-Accept: 7revI3OKdLXh8X/mtb/4h/3AVn8=

Но когда я пытался отправить некоторые данные клиентом, мое соединение зависало. У меня ошибка тайм-аута. Мой сервер не получил ни одного запроса. Nginx записывает в журнал следующее сообщение:

[info] 43386#43386: *1 upstream timed out (110: Connection timed out) while proxying upgraded connection, client: ip, server: example.com, request: "GET /ws HTTP/1.1", upstream: "http://127.0.0.1:5402/ws", host: "example.com"

PS, Бэк-лог-сообщение для туннельного сервера ngrok (когда все работает как запланировано):

<Request GET /ws >
<WebSocketResponse Switching Protocols GET /ws > #HTTP 101 Switching Protocols
 WSMessage(type=<WSMsgType.TEXT: 1>, data=some_str)

У вас есть идеи, как чтобы выяснить эту проблему?

...