需求:nginx默认禁止掉websocket调用,但统功能用到了websocket。
nginx 添加以下几行配置:
location / {
proxy_pass http://127.0.0.1:7000;
##开启websocket调用
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
报错信息:
AWS ELB 原配置如图:
问题分析:
在 AWS ELB中,使用的是http和https协议,但 AWS ELB却不支持WebSocket协议(仅支持HTTP, HTTPs, TCP and SSL.)并且没有任何消息表示ELB支持的HTTP和HTTPS协议可以支持WebSocket。当浏览器端向服务端发送消息时,由于ELB拦截掉了请求,且判断协议不是支持的几种,就残忍的抛弃掉了。
解决方案:
AWS WebSocket 基于HTTP协议,而HTTP协议又是基于TCP协议,ELB支持TCP协议,那么可以将ELB配置中HTTP协议改为TCP协议,https改为SSL,如图: