请教一个 nginx 的端口转发问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
weichengwu
V2EX    NGINX

请教一个 nginx 的端口转发问题

  •  
  •   weichengwu 2021-08-02 15:03:29 +08:00 3915 次点击
    这是一个创建于 1532 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言

    本人是一个不懂后端的 iOS 开发,对 nginx 略知一二,知道它是做反向代理的,知道在哪改 nginx.conf,知道改完怎么 reload

    问题描述

    现有一太内网机器,领导帮我配置了一个可外网访问的域名,并用 nginx 配置了一个 ssl 证书,端口是 8088 ;

    我用 docker 部署了一个服务,暴露的端口是 3000 。

    现在希望能将 3000 端口映射到 8088 端口的一个路径下,比如 https://xxx.com:8088/yyy,从而实现外网能访问 3000 端口的目的。

    网络上搜索了几个结果,但都没有效果,现在的配置:

    location /yyy/ { proxy_set_header Host $http_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_pass http://0.0.0.0:3000/; } 

    现在能实现的效果是能进首页,但是无法加载 css/js 等资源文件,提示 404,但是我不知道该怎么改了。

    29 条回复    2021-08-25 18:23:07 +08:00
    XiaoxiaoPu
        1
    XiaoxiaoPu  
       2021-08-02 15:13:34 +08:00
    proxy_pass 这一行,去掉 ";" 前面的 "/"
    AoEiuV020
        2
    AoEiuV020  
       2021-08-02 15:24:59 +08:00
    仅供参考,我自己配置过同样作用的,

    location ^~/clash/ {
    proxy_pass http://127.0.0.1:9090/;

    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    dablwow
        3
    dablwow  
       2021-08-02 15:32:01 +08:00
    应该不是斜杠的问题,楼主发一下报错的 css/js 的请求路径吧,有可能是写死的,等于在读 8088 的资源(实际不存在)
    weichengwu
        4
    weichengwu  
    OP
       2021-08-02 15:38:50 +08:00
    @XiaoxiaoPu #1 "/" 去掉之后首页都打不开
    weichengwu
        5
    weichengwu  
    OP
       2021-08-02 15:43:10 +08:00
    @AoEiuV020 #2 也不行
    weichengwu
        6
    weichengwu  
    OP
       2021-08-02 15:43:51 +08:00
    @dablwow #3 "GET /assets/application-1b7c2119d0cc0be69a0e6705ee19d5bf859cc64e949a0faf412286a8a53db169.js HTTP/1.1" 404 153 "https://xx x.com:8088/yyy/"
    AoEiuV020
        7
    AoEiuV020  
       2021-08-02 15:54:04 +08:00
    @weichengwu 基本上确定是 html 问题,你希望整个网站都在 /yyy/下,但 html 请求了绝对路径的 js,要改成相对路径才行,
    XiaoxiaoPu
        8
    XiaoxiaoPu  
       2021-08-02 16:19:27 +08:00
    抱歉看错了,没注意到 location 里有 /yyy/

    错误原因应该是如 AoEiuV020 所说。
    defunct9
        9
    defunct9  
       2021-08-02 16:21:19 +08:00
    开 ssh,让我上去看看
    weichengwu
        10
    weichengwu  
    OP
       2021-08-02 16:26:46 +08:00
    @AoEiuV020 #7 感谢,那我估计要改一下服务的源码了
    weichengwu
        11
    weichengwu  
    OP
       2021-08-02 16:27:39 +08:00
    @defunct9 #9 这个不太方便 整个设备是在内网的,公网访问是领导帮我配置的,这一块我也不会弄
    /table>
    AllenHua
        12
    AllenHua  
       2021-08-02 17:26:03 +08:00
    404 就是没有读取到 css/js 资源

    建议把所有资源都通过 lcation / 匹配 反代

    然后 server 块定义一个 root dir

    另外既然有域名了,可以再配置一个子域名,使用 https://abc.example.com 访问服务,这样 url 不更优雅么
    ryd994
        13
    ryd994  
       2021-08-02 17:30:42 +08:00 via Android
    你再看看前端请求的资源文件是在根路径下还是在 /sss/下?
    你可能需要 proxy_redirect 和 subs_filter 。
    但是更正确的做法是修改后端,让后端正确配置到 /sss/
    yufeng0681
        14
    yufeng0681  
       2021-08-02 17:39:23 +08:00
    建议用不同的二级域名实现
    aaa.xxx.com >> A 网站
    bbb.xxx.com >> local:3000
    fdppzrl
        15
    fdppzrl  
       2021-08-02 17:48:45 +08:00 via Android
    改改静态资源的访问路径或者 14 楼的方法
    bipy
        16
    bipy  
       2021-08-02 18:36:18 +08:00
    盲猜一个常见坑,加一条配置试试

    absolute_redirect off;
    ik
        17
    ik  
       2021-08-02 19:22:50 +08:00 via iPhone   1
    0.0.0.0:3000

    不知道你是不是故意改了的

    应该是 127.0.0.1:3000
    kkidou
        18
    kkidou  
       2021-08-02 19:26:24 +08:00
    静态资源加载的问题, 楼上也都说了,可以看下把所需要的静态资源一并放到一个目录下
    v2clay
        19
    v2clay  
       2021-08-02 22:08:09 +08:00
    我也遇到过这个问题,其实就是 静态文件路径问题。因为多了一个 yyy 。
    你需要通匹配,把 js css 文件 匹配到 一个目录下 如 /opt/yyy, 然后把 web 资源下所有的文件 copy 过去就行了(其实只会匹配 js css 文件,全 copy,主要是因为懒)。
    v2clay
        20
    v2clay  
       2021-08-02 22:18:30 +08:00
    @AoEiuV020 # 跟相对绝对没关系,看描述本来就是相对路径。

    主要问题是 请求的 uri 里多了一个 yyy 。如果是相对路径,匹配的是 /yyy/xx.js ,肯定找不到。
    如果是绝对路径,ip:8088/xx.js 匹配到 location / 下,肯定也找不到。
    cpstar
        21
    cpstar  
       2021-08-02 22:23:32 +08:00
    相对路径、绝对路径
    看到问题,猜了大概,看到 6#确定了猜测。
    但是解决这个问题,很大情况下源头不太好修改因为如果他容易修改的话,他就不会用绝对路径这个 SB 的策略了于是解决办法很有可能需要挨个 URL 做反代。

    然后不知道 proxy_reverse

    另外,location 最好用 2#的匹配,当然写你那样也没啥问题。然后结尾斜杠的问题,保持统一,要有都有,要没有都没有,/xxx 和 /xxx/是两个 URL 。
    tqyq88
        22
    tqyq88  
       2021-08-02 22:25:01 +08:00
    不用改路径,加一行 rewrite /yyy/(.*) /$1 break;
    weichengwu
        23
    weichengwu  
    OP
       2021-08-02 22:36:40 +08:00
    感谢楼上各位的回复,今天下午一直在开会,明天去公司一一尝试。
    weichengwu
        24
    weichengwu  
    OP
       2021-08-02 22:37:27 +08:00
    感觉主要还是不懂 nginx 的工作方式,但是仅仅为了配置一个服务把 nginx 整个过一遍太吃精力了
    awker
        25
    awker  
       2021-08-02 22:49:08 +08:00
    可以参考:Nginx proxy_pass 后出现部分请求 404 的解决办法 https://www.jianshu.com/p/55bfbba45fed
    AoEiuV020
        26
    AoEiuV020  
       2021-08-03 09:13:09 +08:00
    @v2clay 你这是在讲什么,#6 楼日志看了没有,问题就是 uri 里没有 yyy,到你这里还 uri 里多了一个 yyy,
    要匹配的就是 /yyy/xx.js 才能被匹配反代到内网 /xx.js ,
    Chieh
        27
    Chieh  
       2021-08-03 13:14:38 +08:00
    $http_host 试试 https://xxx.com:8088/
    abccccabc
        28
    abccccabc  
       2021-08-05 19:19:22 +08:00
    楼主,解决了没有?最终答案是什么?
    weichengwu
        29
    weichengwu  
    OP
       2021-08-25 18:23:07 +08:00
    @abccccabc #28 解决了哈,路径的方式没走通,换多级域名了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     877 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 19:17 PVG 03:17 LAX 12:17 JFK 15:17
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86