一个域名、通过 nginx 有可能完全代理多个 docker 服务么 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nianlifeixing
V2EX    问与答

一个域名、通过 nginx 有可能完全代理多个 docker 服务么

  •  
  •   nianlifeixing 2024-08-18 05:03:45 +08:00 via iPhone 2153 次点击
    这是一个创建于 426 天前的主题,其中的信息可能已经有所发展或是发生改变。
    背景:
    现在有一个域名: https://a.cn ,我在公网服务器启动了 docker 、可能有三四个服务、

    想法:
    我的想法是通过域名+url 、比如 a.cn/app1 、来取代 ip+端口的形式、比如 11.11.32.233:8000 、

    实际问题:
    可能有很多 url 、完全 url 代理不完、比如 static 、其实用的是 docker 容器中的目录

    场景展现:
    用 nginx 代理后 location app1/{ 11.11.32.232:8000/}、这种方式定义后、并不怎么好用、因为会先返回 html 、html 中包含 static 路径、比如/static/res.img , 但因为我实际代理了、所以应该是/app1/static/res.img 、 这种情况有很多、难道要一个个进行代理么、然后回写替代 url ,

    疑惑:
    这种情况下有什么简单方式可以直接用 url 轻松代理 ip+端口么、大家都没遇到过么
    15 条回复    2024-08-18 12:50:44 +08:00
    PolarBears
        1
    PolarBears  
       2024-08-18 05:31:03 +08:00   1
    使用二级域名就没有这个问题了
    jackOff
        2
    jackOff  
       2024-08-18 05:35:17 +08:00   1
    楼上正解,以前用宝塔搭服务就是这样子玩的,主要工作就是把一些灰产项目隐藏在正常的业务路由里
    chenluo0429
        3
    chenluo0429  
       2024-08-18 08:08:39 +08:00 via Android
    实际上需要部署的服务本身支持才行,资源文件使用相对目录,支持设置 BASE_URL 等等。
    rewite 目录确实能做到转写,但是一旦两个服务存在相同的目录资源,你是没办法分清该代理给谁的
    facebook47
        4
    facebook47  
       2024-08-18 09:00:35 +08:00 via Android
    理论可以,只要你的 URL 有规律可循
    sagaxu
        5
    sagaxu  
       2024-08-18 10:10:59 +08:00   1
    通过 path 来区分多个服务,需要你的服务自身支持,例如在配置文件中指定 path ,或者使用相对路径引用资源文件。在服务的配置文件中写入 path ,意味着部署方式影响到了服务自身,也算是某种程度上的耦合。

    更好的方式是通过二级域名来区分,服务自身根据 host 拿到自身域名。
    DIO
        6
    DIO  
       2024-08-18 10:48:11 +08:00 via Android
    Nginx Proxy Manager ,傻瓜式操作,你值得拥有
    yingxiangyu
        7
    yingxiangyu  
       2024-08-18 10:52:12 +08:00   1
    二级域名+反向代理
    oldcai
        8
    oldcai  
    PRO
       2024-08-18 10:58:56 +08:00   1
    https://nginx.org/en/docs/http/ngx_http_sub_module.html#sub_filter


    location /app1/ {
    proxy_pass http://11.11.32.233:8000/;
    sub_filter '/static/' '/app1/static/';
    sub_filter_once off;
    }
    xiaowoniukai
        9
    xiaowoniukai  
       2024-08-18 10:59:23 +08:00
    搞个泛解析,这样一个服务一个名字
    brainzhang
        10
    brainzhang  
       2024-08-18 11:11:15 +08:00   1
    可以的,最简单的办法就是用二级域名,每个 docker 服务用不同端口,然后一个域名对应一个 docker 服务;用 Nginx 的反向代理来控制;

    比如
    A1.xx.com ,对应 8001 端口 服务;
    A2.xx.com ,对应 8002 端口服务;

    每一个服务最好都封装到 docker 服务里面,像 static 目录静态 web 服务这种,最好也不要用 nginx 来做了,也封装到 docker 服务里面,就是做到一个 docker 容器启动,就能从本地 http://127.0.0.1:800x 端口直接访问,这样最干净;

    我原来有一篇文章记录了自己的操作,可以参考一下:

    [Nginx 配置多端口多域名访问 -- 子域名多端口访问]

    https://brain-zhang.github.io/blog/2019/11/18/nginxpei-zhi-duo-duan-kou-duo-yu-ming-fang-wen/
    povsister
        11
    povsister  
       2024-08-18 11:53:49 +08:00 via iPhone
    rewrite 了解一下
    nianlifeixing
        12
    nianlifeixing  
    OP
       2024-08-18 12:47:01 +08:00 via iPhone
    @PolarBears 感谢、确实二级域名是最简单省事的
    nianlifeixing
        13
    nianlifeixing  
    OP
       2024-08-18 12:47:31 +08:00 via iPhone
    @jackOff
    @chenluo0429 确实~ 还是二级域名吧、解析太麻烦了
    nianlifeixing
        14
    nianlifeixing  
    OP
       2024-08-18 12:48:18 +08:00 via iPhone
    @sagaxu 是的、docker 服务基本不可控,我还是老老实实二级域名吧
    nianlifeixing
        15
    nianlifeixing  
    OP
       2024-08-18 12:50:44 +08:00 via iPhone
    @brainzhang 是的、还是二级域名方便 哈哈
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2850 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 02:41 PVG 10:41 LAX 19:41 JFK 22:41
    Do have faith in what you're doing.
    ubao msn 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