Добрый день.
Имеется сайт с веб-сервером nginx. Также поднят вебсокет сервер. Nginx выступает в качестве прокси для сервера вебсокетов. В браузере устанавливается соединение по вебсокету. Проблема в том, что если по вебсокету не передаются данные на протяжении 100 секунд, то соединение обрывается.
Нагуглил что в конфиге nginx на это может влиять параметр proxy_read_timeout. Выставил 950 секунд и всё-равно по истечении 100 секунд соединение обрывается. Эксперимента ради параметр proxy_read_timeout выставил в 60 - произошел обрыв через эти 60 секунд, а вот при 950 секундах обрывает через 100 секунд.
Может не в настройке nginx дело, а в настройках самого вебсокета?
Также сайт подключен к Cloudeflare, но гугл говорит что Cloudeflare нормально работает с вебсокетами и не рубит соединение.
Конфиг nginx для вебсокет сервера:
upstream binaryt {
server 127.0.0.1:9009;
}
location:
location /binaryt {
proxy_pass http://binaryt;
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_http_version 1.1;
proxy_read_timeout 950s;
proxy_send_timeout 950s;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
Подключаюсь с помощью библиотеки binary js:
const Websocket = function () {
this.client = new BinaryClient('wss://mydomain.com/binaryt');
}
PS. Добавлю что после обрыва в обработчике close на сервере возвращается code = 1000, а на клиенте code = 1006