关于一个端口 转发的疑问

358 天前
 blacktail

我有一个游戏面板,分为前端和后端。 前端是一个 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 服务,让外网也能访问吗。

2023 次点击
所在节点    程序员
16 条回复
guguji5
358 天前
路由器 ?
blacktail
358 天前
@guguji5
doraf
358 天前
这报错说请求中缺少 “authorization heads ”,正常情况下,这个“authorization heads ”哪里来的?
blacktail
358 天前
@doraf 应该来自于这里
![图片]( https://i.328888.xyz/2023/05/16/ViwzY8.png)
blacktail
358 天前
doraf
358 天前
@blacktail “authorization heads ”是如何设置的,设置成功了么,如果成功了,使用的时候,ws://这个请求能正常获取之前设置的“authorization heads ”吗?一步步检查检查吧。
blacktail
358 天前
@doraf 这个面板不是我开发的。。。并不清楚这玩意如何设置的。
chrawsl
358 天前
nginx 反代传递一下 header 试试

proxy_set_header Authorization $authorization ;
blacktail
358 天前
@chrawsl 把 8080 反代到 80 ?
chrawsl
358 天前
@blacktail 要不你贴一下整个配置文件?
blacktail
358 天前
chrawsl
358 天前
看着像在外网尝试连接了内网的 ws 地址,没想到什么好的解决方案
blacktail
358 天前
@chrawsl 。。。就是这样的,主贴里说了。问题就在于外网访问连不上内网的 websocket 。
chrawsl
358 天前
要不就先映射一下 ws 端口,然后在前端判定一下当前域名,在内网就连内网地址,在外网就连外网地址,或者在 nginx 反代的做一下 replace ,直接全文替换连接的地址
blacktail
358 天前
@chrawsl
1. 第一个办法。面板不是我开发的,做不了。。。
2. 第二个办法?把 ws 的 8080 反代到 80 上?
LinePro
358 天前
解决方法应该是使用 nginx 反向代理内网 8080 端口上的 http / websocket 服务到外网没错。
贴一下你反代 8080 的 nginx 配置文件,还有具体的报错响应,请求头、请求内容、响应头、响应内容与内网中的正常请求比较一下看有没有什么不一致的地方。另外再检查一下是不是有什么非 ws 的普通 HTTP 请求发生错误,比如跨域之类的问题。
反正基本思路就是检查有什么不一样的请求和响应导致了错误。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/940369

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX