Тайм-аут Nginx для websocket

#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 минут.