1、nginx反向代理websocket 403

nginx线上错误整理
文档来源: https://www.xncoding.com/2018/03/12/fullstack/nginx-websocket.html
  WebSocket协议相比较于HTTP协议成功握手后可以多次进行通讯,直到连接被关闭。但是WebSocket中的握手和HTTP中的握手兼容, 它使用HTTP中的Upgrade协议头将连接从HTTP升级到WebSocket。这使得WebSocket程序可以更容易的使用现已存在的基础设施。
  WebSocket工作在HTTP的80和443端口并使用前缀ws://或者wss://进行协议标注,在建立连接时使用HTTP/1.1的101状态码进行协议切换, 当前标准不支持两个客户端之间不借助HTTP直接建立Websocket连接。
  一般我们开发的WebSocket服务程序使用ws协议,明文的。但是怎样让它安全的通过互联网传输呢?这时候可以通过nginx在客户端和服务端直接做一个转发了, 客户端通过wss访问,然后nginx和服务端通过ws协议通信。如下图所示:
nginx线上错误整理_第1张图片
解决办法

http {
 # 这个map是在http中定义
map $http_upgrade $connection_upgrade {    
        default upgrade;
        ''      close;
}

#这里是虚拟主机
server {
        listen 80;
        server_name 外网地址;
        charset utf-8;        location / {
            proxy_pass http://ip:port;
            index index.php index.html;
            proxy_read_timeout 300s;
            proxy_send_timeout 300s;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            # ws_proxy websocket
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
        }
}

最后重启解决

官网解决方案: http://nginx.org/en/docs/http/websocket.html
nginx线上错误整理
websocket文件状态
nginx线上错误整理_第2张图片

后续更新中...