大多数服务的地址不会直接暴露出来,和app之间都会有个API网关。但开发时为了调试方便需要将app的部分请求导到本地服务来处理。
以前我是通过直接改dns配置,将API网关的域名的IP地址配成我本机的,但本地没有搭建所有的服务(比如运营系统),某些请求收不到回复的时候app会转很久的圈圈。
后面尝试用Charles工具的”Map Remote”功能,但是它没能将WebSocket数据Map到我本机,试了搜索到的解决方法也没凑效。
最后一想Nginx不就是做这个代理功能的吗?果然用几行配置就搞定了!
将WebSocket数据和HTTP请求代理到不同的服务
配置文件nginx.conf参考了”配置Nginx反向代理WebSocket“这篇文章。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| # WebSocket服务搭建在我本地的9090端口,Nginx服务也在我本机 upstream websocket { server localhost:9090; }
upstream api { server test.xxx.xxx.com:8080; # API网关地址 } # 登录请求代理到我本地 location /xxx/login { proxy_pass http://websocket; proxy_read_timeout 300s; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; }
# 其它请求代理给API网关处理 location /xxx/ { proxy_pass http://api; }
|
101是WebSocket握手成功的HTTP响应码,200是API网关返回的HTTP响应码。
就是这么简单!