nginx: websocket не удалось подключиться

Я работаю на Nginx, слушая только на 443 порту. За этим у меня есть другой внутренний сервер, прослушивающий http и порт 8090. Я сделал перенаправление и могу получить доступ к его веб-серверу из Интернета, но веб-сокеты терпят неудачу. В консоли браузера при подключении к веб-серверу возникает ошибка: сбой подключения WebSocket к "wss://public_fqdn/internal_app/api/ws": ошибка во время рукопожатия WebSocket: неожиданный код ответа: 404

Моя конфигурация nginx:

сервер {

слушайте @IP_publique:443 ssl;

    # Redirect to internal_app
    location ^~ /internal_app/ {
            access_log      /var/log/nginx/otecs_vlan3603/internal_app_access.log main;
            error_log       /var/log/nginx/otecs_vlan3603/internal_app_error.log debug;
            proxy_redirect https://$RPpublic_name/internal_app/ http://$internal_appfqdn:8090/internal_app/;
            proxy_set_header                Host $host;
            proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header    X-Real-IP       $remote_addr;

            if ($request_uri ~* "/internal_app/(.*)") {
                    proxy_pass  http://$internal_appfqdn:8090/internal_app/$1;
                    }
            proxy_pass http://$internal_appfqdn:8090/internal_app/;

            }

    # Redirect to web socket app
    location ^~ /internal_app/api/ws {
            access_log      /var/log/nginx/otecs_vlan3603/internal_app_api_access.log main;
            error_log       /var/log/nginx/otecs_vlan3603/internal_app_api_error.log debug;
            proxy_redirect off;
            proxy_set_header                Host $host;
            proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header    X-Real-IP       $remote_addr;

            proxy_pass http://$internal_appfqdn:8090/;

            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "Upgrade";
            proxy_read_timeout 86400;
            } }

Я сделал 2 местоположения для лучшего просмотра запросов websocket. В веб-браузере я вижу разницу между запросом из внутренней сети и из Интернета. Для внутреннего запроса первый запрос WS имеет ответ 101, но для интернет-запроса этот первый запрос WS имеет ответ 200 (и поле подключения заголовка установлено "поддерживать в действии", а не "обновлять"). Добавление базовой строки для nginx для поддержки websocket недостаточно.

Сертификат предоставляется letsencrypt/certbot.

0 ответов

Другие вопросы по тегам