我有一个游戏面板,分为前端和后端。 前端是一个 php 服务,由 nginx 代理,跑在 80 端口上。 后端是一个 websocket 服务,跑在 8080 端口上。 在前端上点击某个按钮进入游戏服务器控制面板会去连接后端的 websocket 。
我把面板的 80 端口在路由器里用另一个端口转发出去了,大概是 http://xxxx.top:1234,但是外网访问时,每当进入游戏服务器控制面板就会报错。 而在局域网访问时正常的。
目前尝试过把 8080 也转发出去,然后在访问时候手动更改端口,大概是 http://xxxx.top:1235,然后就报错。 {"error":"The required authorization heads were not present in the request."}
所以有啥好办法能转发这个 websocket 服务,让外网也能访问吗。
1
guguji5 2023-05-16 12:05:47 +08:00
路由器 ?
|
3
doraf 2023-05-16 12:12:49 +08:00
这报错说请求中缺少 “authorization heads ”,正常情况下,这个“authorization heads ”哪里来的?
|
4
blacktail OP |
5
blacktail OP |
6
doraf 2023-05-16 12:25:38 +08:00
@blacktail “authorization heads ”是如何设置的,设置成功了么,如果成功了,使用的时候,ws://这个请求能正常获取之前设置的“authorization heads ”吗?一步步检查检查吧。
|
8
chrawsl 2023-05-16 12:52:00 +08:00
nginx 反代传递一下 header 试试
proxy_set_header Authorization $authorization ; |
11
blacktail OP @chrawsl [nginx 配置]( https://pastebin.com/YX3ZAG80)
|
12
chrawsl 2023-05-16 15:57:48 +08:00
看着像在外网尝试连接了内网的 ws 地址,没想到什么好的解决方案
|
14
chrawsl 2023-05-16 16:58:02 +08:00
要不就先映射一下 ws 端口,然后在前端判定一下当前域名,在内网就连内网地址,在外网就连外网地址,或者在 nginx 反代的做一下 replace ,直接全文替换连接的地址
|
15
blacktail OP |
16
LinePro 2023-05-16 18:53:19 +08:00
解决方法应该是使用 nginx 反向代理内网 8080 端口上的 http / websocket 服务到外网没错。
贴一下你反代 8080 的 nginx 配置文件,还有具体的报错响应,请求头、请求内容、响应头、响应内容与内网中的正常请求比较一下看有没有什么不一致的地方。另外再检查一下是不是有什么非 ws 的普通 HTTP 请求发生错误,比如跨域之类的问题。 反正基本思路就是检查有什么不一样的请求和响应导致了错误。 |