planka通过moon转发访问失败排查及解决 📅 2026/8/14 1:21:04 概述我的planka服务在内网上pc访问的时候是通过zerotier内网穿透过去访问的最近pc所在网络环境不稳定导致planka访问不了了此时我通过一台中间跳板机将跳板机纳入zerotier内网然后通过nginx转发特定端口的流量到planka实例中在转发的过程中遇到了websocket链接失败的问题然后通过伪造ws请求时的origin和host解决了就是planka配置中的base_url排查过程先在pc的chrome浏览器的network中观察ws链接状态最先发现外部链接status都是finished并且ws在不断的重连此时进入chrome的ws链接中观察发现message中直接报错request header信息中只有一个request url此时只知道通过跳板机的nginx转发后ws连不上了以为是nginx的ws配置问题然后调整了nginx配置支持了ws链接但还是连接失败到这里为止问题定位到在跳板机 - planka实例的ws链接中在跳板机上手动测试发现ws连接也失败了。进一步定位到问题不在nginx而是跳板机直接就连不上curl -i \ -H Connection: Upgrade \ -H Upgrade: websocket \ -H Sec-WebSocket-Version: 13 \ -H Sec-WebSocket-Key: SGVsbG9XZWJzb2NrZXQ \ http://xxx.xxx.xxx.xxx:xxx/socket.io/?__sails_io_sdk_version1.2.1__sails_io_sdk_platformnode__sails_io_sdk_languagejavascriptEIO3transportwebsocket到这里为止问题再进一步缩小至跳板机 - planka实例的链接有问题然后不通过跳板机访问观察了下ws链接发现请求ok只是网络不稳定这里想到看了下planka的配置发现在配置中有base_url这一项之后在nginx中伪造了host和origin请求成功跳板机nginx配置server{listen33000;server_name _;location /{proxy_pass http://xxx.xxx.xxx.xxx:xxx;proxy_http_version1.1;proxy_set_header Host$host;proxy_set_header X-Real-IP$remote_addr;proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto$scheme;proxy_connect_timeout 10s;proxy_send_timeout 600s;proxy_read_timeout 600s;proxy_buffering off;}location /socket.io/{proxy_pass http://xxx.xxx.xxx.xxx:xxx;proxy_http_version1.1;proxy_set_header Upgrade$http_upgrade;proxy_set_header Connectionupgrade;#伪造下header的Host和Origin绕过planka配置中base_url的限定proxy_set_header Host xxx.xxx.xxx.xxx:xxx;proxy_set_header Origin http://xxx.xxx.xxx.xxx:xxx;proxy_read_timeout 3600s;proxy_send_timeout 3600s;proxy_buffering off;}}