我的设置包含在http:// localhost:9222上运行的无头Chrome实例。 如果我通过WebSocket客户端直接连接它,它将起作用。
我想把一个Nginx服务器块作为代理放在它的前面(稍后我会添加authentication等)。
我的configuration是:
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开发工具的用户界面显示,如果我打开http://chrome.mydomain.eu 。 但是,websocket连接无法build立。
浏览器尝试连接到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”failed(2:No such file or directory),client:130.79.192.16,server:chrome。 example.eu,请求:“GET / devtools / page / 6877e641-fc1e-4196-bb55-0c3e1608af4a HTTP / 1.1”,主机:“chrome.example.eu”
为什么nginx会尝试打开一个静态文件,因为没有try_files ? 为什么nginx不让Chrome实例处理该请求(并且它在父位置块中工作)?
我觉得我错过了一些简单的东西,但是我尝试了很多没有成功的小变化。
子问题:另外,当浏览器要求ws://stream时,我可以摆脱子位置块吗? (即自动协议升级,而不必硬编码WebSocket URL) – 如果您有任何其他types的build议,请不要犹豫。
你有没有尝试设置你的孩子的位置proxy_pass? 据我所知,内容处理程序不被inheritance。