V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
blacktail
V2EX  ›  程序员

关于一个端口 转发的疑问

  •  
  •   blacktail · 346 天前 · 2010 次点击
    这是一个创建于 346 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    proxy_set_header Authorization $authorization ;
    blacktail
        9
    blacktail  
    OP
       346 天前
    @chrawsl 把 8080 反代到 80 ?
    chrawsl
        10
    chrawsl  
       346 天前
    @blacktail 要不你贴一下整个配置文件?
    blacktail
        11
    blacktail  
    OP
       346 天前
    chrawsl
        12
    chrawsl  
       346 天前
    看着像在外网尝试连接了内网的 ws 地址,没想到什么好的解决方案
    blacktail
        13
    blacktail  
    OP
       346 天前
    @chrawsl 。。。就是这样的,主贴里说了。问题就在于外网访问连不上内网的 websocket 。
    chrawsl
        14
    chrawsl  
       346 天前
    要不就先映射一下 ws 端口,然后在前端判定一下当前域名,在内网就连内网地址,在外网就连外网地址,或者在 nginx 反代的做一下 replace ,直接全文替换连接的地址
    blacktail
        15
    blacktail  
    OP
       346 天前
    @chrawsl
    1. 第一个办法。面板不是我开发的,做不了。。。
    2. 第二个办法?把 ws 的 8080 反代到 80 上?
    LinePro
        16
    LinePro  
       346 天前
    解决方法应该是使用 nginx 反向代理内网 8080 端口上的 http / websocket 服务到外网没错。
    贴一下你反代 8080 的 nginx 配置文件,还有具体的报错响应,请求头、请求内容、响应头、响应内容与内网中的正常请求比较一下看有没有什么不一致的地方。另外再检查一下是不是有什么非 ws 的普通 HTTP 请求发生错误,比如跨域之类的问题。
    反正基本思路就是检查有什么不一样的请求和响应导致了错误。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2655 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 103ms · UTC 01:58 · PVG 09:58 · LAX 18:58 · JFK 21:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.