#nginx #asp.net-core #websocket #timeout #nginx-reverse-proxy
#nginx #asp.net-ядро #websocket #тайм-аут #nginx-обратный прокси
Вопрос:
Я подключаю клиент с websocket через Nginx (в качестве обратного прокси-сервера) к asp.net основное приложение. Между сервером и клиентом есть команды сердцебиения, чтобы поддерживать соединение с websocket открытым.
Моя проблема в том, что когда клиент отключается, отсоединяя сетевой кабель, соединение остается открытым. Я хотел бы установить тайм-аут, при котором, когда клиент ничего не отправляет в течение определенного времени, соединение закрывается.
Я пробовал несколько тайм-аутов без какого-либо эффекта. ( proxy_send_timeout
, client_body_timeout
, keepalive_timeout
, send_timeout
…) Единственный тайм-аут, который мне удалось установить, был proxy_read_timeout
. Что мне не понравилось, так это то, что этот тайм-аут сбрасывался каждый раз, когда сервер отправлял что-либо (а не клиенту).
Какой тайм-аут я должен установить для отключения клиента, если клиент ничего не отправляет в течение x секунд?
Комментарии:
1. Вы нашли решение?
2. На самом деле нет. Одна из возможностей — реализовать его на прикладном уровне. Другой возможностью может быть установка тайм-аутов tcp на уровне операционной системы.
Ответ №1:
Вы пробовали эту конфигурацию?
location /ws {
proxy_read_timeout 300s;
proxy_connect_timeout 75s;
proxy_pass https://your_channel_daphne;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
Я попробовал это и решил.
Комментарии:
1. Спасибо за ваш ответ. Я попробовал, но тайм-аут соединения по-прежнему занимал ~ 15 минут. Я предполагаю, что это какой-то тайм-аут TCP в операционной системе. Вместо этого я хотел бы сократить его до 1-2 минут.