Я использую веб-сокеты для своего проекта. Я использую 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)
У вас есть идеи, как чтобы выяснить эту проблему?