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

Не удается подключиться через веб-сокеты с прокси-сервером nginx

Моя установка состоит в том, что экземпляр Chrome без головы работает на http: // локальный: 9222. Он работает, если я подключаюсь к нему напрямую через клиент WebSocket.

Я хотел бы поставить перед ним блок сервера Nginx в качестве прокси (позже я добавлю аутентификацию и т. Д.).

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

server {
    # Logic configuration

    server_name chrome.example.eu;

    access_log /opt/chrome/access.log;
    error_log /opt/chrome/error.log;

    location / {
        proxy_pass http://127.0.0.1:9222;
        proxy_http_version 1.1;
        proxy_set_header Host $host;

        location /devtools/page/ {
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_read_timeout 86400;
        }
    }

    # Networking

    listen 80;
}

Часть HTTP работает нормально. Пользовательский интерфейс Chrome devtools отображается, если я открываю http://chrome.mydomain.eu. Однако подключение к веб-сокету не может быть установлено.

Браузер пытается подключиться к ws://chrome.example.eu/devtools/page/6877e641-fc1e-4196-bb55-0c3e1608af4a но сервер не обновляется до соединения WebSocket. Nginx отправляет ответ 404, а журнал error.log содержит строку, которую я не могу понять:

* 690 open () "/ usr / share / nginx / html / devtools / page / 6877e641-fc1e-4196-bb55-0c3e1608af4a" не удалось (2: нет такого файла или каталога), клиент: 130.79.192.16, сервер: chrome. example.eu, запрос: "GET / devtools / page / 6877e641-fc1e-4196-bb55-0c3e1608af4a HTTP / 1.1", хост: "chrome.example.eu"

Зачем nginx пытаться открыть статический файл, если нет try_files? И почему nginx не позволяет экземпляру Chrome обрабатывать этот запрос (и он работает в родительском блоке местоположения)?

Я чувствую, что упускаю что-то простое, но я безуспешно пробовал множество небольших вариаций.

Дополнительный вопрос: также могу ли я избавиться от дочернего блока местоположения, когда браузер запрашивает поток ws: //? (то есть автоматическое обновление протокола без необходимости жесткого кодирования URL-адреса WebSocket). И не сомневайтесь, если у вас есть какие-либо другие рекомендации.

Вы пробовали установить proxy_pass для местоположения вашего ребенка? Насколько мне известно, обработчики контента не наследуются.