使用nginx代理wss时 nginx proxy_pass指令为何是http协议?
程序我已经测试通过
以下是nginx转发的配置
我有一点不理解
websocket服务我使用gatewayworker开了一个websocket服务
为何转发里是http
如果我直接访问这一地址,他又会提示错误
location /wss
{
proxy_pass http://127.0.0.1:8585;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Real-IP $remote_addr;
}
这是什么原理?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Nginx本身是一个Server,当nginx作为一个代理服务器运行起来的后,用户A向nginx发起一个http请求实际上是一个基于tcp/ip的连接,因为http是tcp/ip协议簇的一个组合协议。当nginx收到请求后nginx会遍历server实例下的location模块数组,匹配到模块后读取模块配置,proxy_pass参数作为nginx的下一跳目标宿主机,两个主机之间需要建立基于传输的可信任连接,而刚好tcp/ip提供连接可靠(面向连接)和基于传输的特性,因此nginx服务器和宿主机之间想要建立一个可靠连接基于tcp/ip进行是最佳选择,当nginx解析出proxy_pass参数的url之后与宿主机建立起一个基于http的可靠连接似乎顺理成章,nginx代理现在已经打通了两边的连接,那么可以开始运输资源了。
这个workerman与thinkPHP的实战项目视频不错,利用websocket协议实现了长连接,来做即时通讯,在线客服。地址 http://study.163.com/course/i...