【问题标题】:Why isn't Nginx changing the protocol to WebSocket?为什么 Nginx 不将协议更改为 WebSocket?
【发布时间】:2021-02-05 10:19:19
【问题描述】:

我正在尝试运行 Laracvel-echo。

主机配置:

location /socket.io {
    proxy_pass http://127.0.0.1:6002/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header Host $host;
}

我用 Socat 捕获标题:

socat -v TCP-LISTEN:6002,fork TCP:127.0.0.1:6001

在我的 DEV 服务器上,我看到一切正常,协议正在更改(HTTP/1.1 101 切换协议):

2020/10/22 13:51:36.147102  length=175 from=0 to=174
HTTP/1.1 101 Switching Protocols\r
Upgrade: websocket\r
Connection: Upgrade\r
Sec-WebSocket-Accept: yU0AKhFOQaw5j9cQS8oq2bjx1pw=\r
Sec-WebSocket-Extensions: permessage-deflate\r

但在 PRODUCTION 服务器中,我看到了 GET 协议 (GET /socket.io HTTP/1.1):

 2020/10/22 13:50:34.161919  length=588 from=0 to=587
GET /socket.io HTTP/1.1\r
Upgrade: websocket\r
Connection: Upgrade\r
Host: localhost:6002\r
Pragma: no-cache\r
Cache-Control: no-cache\r
Authorization: Basic YWlkYXI6MTIzMTIz\r
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36\r
Origin: chrome-extension://pfdhoblngboilpfeibdedpjgfnlcodoo\r
Sec-WebSocket-Version: 13\r
Accept-Encoding: gzip, deflate\r
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7\r
Sec-WebSocket-Key: rq5CaFXEzZ/vWSnOJ5H3PA==\r
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits\r

我的问题与此有关:WebSocket with Laravel-echo-server: 502 Bad gateway 是 NGINX 的问题还是我错了?

请帮帮我!)

【问题讨论】:

    标签: laravel nginx reverse-proxy nginx-reverse-proxy laravel-echo


    【解决方案1】:

    我不知道问题是什么,但我找到了解决方案。 我更新了很多:将 Nginx 更新到 1.19.1,可能安装了一些额外的模块。不是全局安装 npm,而是在本地安装。 它奏效了……

    注意:这仅在您编写 location /socket.io.

    时有效。

    【讨论】:

      猜你喜欢
      • 2019-05-13
      • 1970-01-01
      • 1970-01-01
      • 2018-08-04
      • 2017-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-01
      相关资源
      最近更新 更多