Моя установка состоит в том, что экземпляр 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 для местоположения вашего ребенка? Насколько мне известно, обработчики контента не наследуются.