Назад | Перейти на главную страницу

Ошибка 404 при подключении к websocket за nginx proxy_pass

Я хотел бы обслуживать веб-узел за местом на моем веб-сервере. Например, если мой домен http://mydomain Я хочу, чтобы мой веб-сокет был доступен по адресу ws://mydomain/ws.

Я использую локальный сервер websocket на порту 8080, и я могу подключиться к нему, используя как localhost, так и IP-адрес локальной сети (192.168.1.100). Когда я пытаюсь получить доступ к веб-сокету по этому пути, я получаю Error: Unexpected server response (404).

Вот моя попытка сделать это в nginx:

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

upstream websocket {
    server 127.0.0.1:8080;
}

server {
    listen 80;
    listen [::]:80;

    access_log /var/log/nginx/mydomain.access.log;
    error_log /var/log/nginx/mydomain.error.log;

    server_name mydomain;

    location / {
        alias /var/www/mydomain/htdocs;
        index index.html;
        try_files $uri $uri/ =404;
    }

    location /ws/ {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;

        proxy_pass http://websocket;
    }
}

Я нашел несколько предыдущих вопросов в Интернете, но, похоже, ни один из них не решает эту проблему; Я даже не уверен, возможен ли такой тип прокси.

Изначально у меня был протокол веб-сокета, определенный «чат», и я получал Sent non-empty 'Sec-WebSocket-Protocol' header but no response was received ошибка; удаление исправляет это на данный момент.

Мой сервер websocket использует локально созданный NetCoreServer от https://github.com/chronoxor/NetCoreServer и почти идентичен имеющемуся у них примеру небезопасного сервера websocket. Сообщите мне, если я могу предоставить дополнительную информацию, которая поможет решить эту проблему.