Nginx代理WebSocket出现403的问题

       我自己玩的一个后管项目里用到WebSocket技术,我用它实时更新系统的通知。在本地运行一点问题都没有,但是把项目部署到阿里云却一直不好用,经过一番排查,我发现是浏览器请求WebSocket资源出现了403,然后我去百度搜索该问题的原因,最后我把问题锁定在Nginx反向代理上(我在阿里云服务器部署了Nginx,配置了SSL证书,所有的http请求先转发到https,然后再反向代理到本地),我又去Nginx官网查找相关资料,Nginx 从 1.3 版本以后就支持 WebSocket 技术,可以为 WebSocket 做反向代理和负载均衡,官网(https://www.nginx.com/blog/websocket-nginx/)的配置方法如下:

http {
    map $http_upgrade $connection_upgrade {
        default upgrade;
        '' close;
    }
 
    upstream websocket {
        server 192.168.100.10:8010;
    }
 
    server {
        listen 8020;
        location / {
            proxy_pass http://websocket;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
        }
    }
}

       我用上述方法配置Nginx还不管用,我又查阅了一些资料,需要在Nginx配置添加 proxy_set_header Origin ""; 一行就可以解决问题,我配置如下:

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

     server {

         ...   ...

         #配置websocket 
         location /endpointChat  {
             proxy_pass http://172.24.7.69:82;
             proxy_http_version 1.1;
             proxy_set_header Upgrade $http_upgrade;
             proxy_set_header Connection $connection_upgrade;
             proxy_set_header Origin "";
         }
         
         ...   ...
     }

    ...   ...

}

 

你可能感兴趣的:(Nginx)