说明
这篇文章只是debug时的一个笔记,所讲述的解决方案只适用于文章中描述到的固定场景。
debug过程
通过排查发现,在tornado中,websocket连接地址使用了如下方法获取
ws_url = "ws://{}{}".format(self.request.host, ws_query)
这段代码中的self.request.host
方法是tornado自带的,用来获取数据请求方的域名。
而部署tornado的时候,我们使用了同一个服务的nginx做了反向代理,也就是说,数据请求时通过nginx转发的,问题出在nginx上。
问题进一步分析
在nginx配置文件中,使用了以下参数。
location / {
proxy_pass http://127.0.0.1:8046;
}
location中的这段地址是tornado地址,这就是问题的根源,把127.0.0.1改为服务器外网地址即可。