› NGINX
› NGINX Trac
› 3rd Party Modules
› Security Advisories
› CHANGES
› OpenResty
› ngx_lua
› Tengine
在线学习资源
› NGINX 开发从入门到精通
NGINX Modules
› ngx_echo
maninnet
V2EX  ›  NGINX

请问一个二级域名如何配置可以访问多个 http 服务?

  •  1
     
  •   maninnet · Dec 3, 2024 · 9899 views
    This topic created in 699 days ago, the information mentioned may be changed or developed.

    我手上只有一个二级域名 sub.abc.com ,但我有一个 alist 和 nas 的 http 服务想通过这个二级域名进行访问,比如 sub.abc.com/alist 和 sub.abc.com/nas 分别访问 alist 和 nas 的管理后台,我尝试通过 nginx 配置 location 的 rewrite 和 sub_filter 都没办法解决,请问有什么解决办法吗?

    77 replies  •  2024-12-04 22:29:33 +08:00
    DesnLee
    DesnLee
    Dec 3, 2024
    1
    location + proxy_pass
    kumiko
    kumiko
    Dec 3, 2024 via Android❤️1
    2
    不要 subfolder 容易出问题,建议 sub domain 。nginz 配不来可以使用 Nginx proxy manager ,比较无脑
    maninnet
    maninnet
    OP
    Dec 3, 2024 via iPhone
    3
    @DesnLee 我就是这样,不行,首页可以,后面的请求 host 还是 sub.abc.com ,filebname 还是原来的相对路径,我通过 sub_filter 替换,部分可以,但是动态生成的路径就无能为力了。
    maninnet
    maninnet
    OP
    Dec 3, 2024 via iPhone
    4
    @kumiko 我只有一个二级域名啊,这个域名不是我的,是其他人提供给我的,我没有权限配置 dns 解析。
    esee
    esee
    Dec 3, 2024
    5
    我也想知道,以前自己也想搞但没搞好,最后还是用了不同的域名来解决
    Tiller
    Tiller
    Dec 3, 2024
    6
    你请求没办法改的话,无解。我遇到过这种的,基本上要么改代码,要么多域名。
    maninnet
    maninnet
    OP
    Dec 3, 2024 via iPhone
    7
    @esee 网上查了挺久,问了几个 ai 都解决不了,上来问问有没有人这么配置过的…难道大家都没有这种需求吗?
    maninnet
    maninnet
    OP
    Dec 3, 2024 via iPhone
    8
    @Tiller 代码是改不了的…只能麻烦别人配置多个域名了,改 IP 也很麻烦。
    adoal
    adoal
    Dec 3, 2024❤️7
    9
    sub folder 方式需要下面的程序或者至少它用到的 web 框架按照“我知道自己有可能被苦逼的主人放在一个 sub folder 下面,所以有配置选项让我按照 sub folder 来生成 URL”设计过才行,并不是前端反代做了改写就能搞定的
    lazyyz
    lazyyz
    Dec 3, 2024 via Android
    10
    一般都是不同的二级、三级甚至更多级域名对应不同的后端服务
    anonydmer
    anonydmer
    Dec 3, 2024❤️4
    11
    sub.abc.com/alist 和 sub.abc.com/nas 这种都需要 alist 和 nas 应用本身支持 sub url 的,但是往往不是所有的应用都支持
    aaronkk
    aaronkk
    Dec 3, 2024
    13
    路径改写不了就试试不同端口吧,反正内部服务自己用不讲究的
    jifengg
    jifengg
    Dec 3, 2024
    14
    通用的这些,如果配置完了还不行,一般就是 JavaScript 里路径写死了类似 “/api”,“/public” 之类的,如果你不改源码,那就看看这些服务里的 js 文件,具体问题具体分析,改 js 文件。
    改完一处,部署后发现有那个路径又不对了,再接着改。
    windstill
    windstill
    Dec 3, 2024
    15
    试试不同端口吧,反正家用也用不了 80 端口。我 nas 上所有服务都是同一个域名+不同端口区别。
    xiangyuecn
    xiangyuecn
    Dec 3, 2024
    16
    https://xx.oo/port------------------8080/xxxx 反代到 http://127.0.0.1:8080/xxxx
    lower
    lower
    Dec 3, 2024
    17
    @aaronkk 按 op 描述的场景问题,端口应该正解
    HeHeDaGe
    HeHeDaGe
    Dec 3, 2024
    18
    @anonydmer 这是正解,得应用本身支持才可以的
    yinmin
    yinmin
    Dec 3, 2024 via iPhone❤️1
    19
    OP 没做过 web 开发吧,大多数的系统都不支持调整路径的。

    说过故事吧:

    领导:李工,你们团队开发系统测试都过了,准备上线。哦,上线的路径是 /某某路径/

    李工:啊! 不行。这个需求为什么不在开发前提出来,现在都已经开发测试完成了,改路径要重新返工,工作量巨大,还要重新测试,开发+测试最起码要 2 周时间。

    领导:你们开发的时候就要考虑部署到不同的路径,为什么要返工?

    李工:你看系统需求文档里就没有这条啊,现在说了,我们要检查每个页面程序,几十万行代码重新过一遍,最起码要 3-5 天,然后再全功能测试,再修 bug ,再测,2 周都很紧张,要天天加班。

    领导:不行,最多 3 天。

    李工:要尊重科学啊,工作量这么大,不可能完成啊。要么,换成子域名不改路径,今天就能上线。

    领导:子路径和子域名有什么差别啊?叫网管部的小张过来

    小张:子路径和子域名没啥区别,我 dns 配置一下,几分钟搞定。

    领导:…

    (大多数 web 系统在开发前就没规划自定义路径,开发后要自定义路径,修改工作量大,之后基本都是不了了之)
    DesnLee
    DesnLee
    Dec 3, 2024
    20
    @maninnet #3 那得前端项目做相应的配置,不是纯代理部分能解决的
    dode
    dode
    Dec 3, 2024
    21
    建议二选一修改路径,不好改的直接使用 sub.abc.com ,好改的使用 sub.abc.com/alist
    zxabition
    zxabition
    Dec 3, 2024
    22
    让提供域名的人将 *.sub.abc.com 解析到你的机器,你再加一层子域名不就行了。。。

    alist.sub.abc.com 指向 alist

    nas.sub.abc.com 指向 nas



    题外话:推荐使用 zoraxy 。nginx porxy manager 的 aems.sh 我用着有些问题,证书申请不下来,zoraxy 没啥问题。

    另外,zoraxy 资源占用还小一些。
    geeksnail
    geeksnail
    Dec 3, 2024
    23
    location ^~ /api {
    proxy_pass http://127.0.0.1:8085;
    proxy_set_header Host $host;

    查了下自己的配置,不知道这个$host 改了有没有效?
    akabk
    akabk
    Dec 3, 2024
    24
    不知道你是怎么查的,至少 AList 的官方文档有说明。

    将 site_url 设置为 https://nn.ci/alist 或者仅/alist, 然后重启 alist
    location /alist/ {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Range $http_range;
    proxy_set_header If-Range $http_if_range;
    proxy_redirect off;
    proxy_pass http://127.0.0.1:5244/alist/;
    # the max size of file to upload
    client_max_body_size 20000m;
    }
    maninnet
    maninnet
    OP
    Dec 3, 2024 via iPhone
    25
    感谢各位解答,我在尝试的时候就意识到需要后端配合了,所以用了 sub_filter 做了部分替换,但是没有办法根本解决。
    @zxabition 用 3 级域名的话配合 nginx 可以实现吗?
    likai
    likai
    Dec 3, 2024
    26
    proxy_pass 转发
    zxabition
    zxabition
    Dec 3, 2024
    27
    可以的,nginx proxy manager 本质上也就是个 nginx+自动配置,

    我用三级域名+nginx proxy manager 实现过,不同域名跳转不通页面。

    例如 hz.xxxx.xx *.hz.xxxx.xx 解析成同一个 ip ,然后 qbit.hz.xxxx.xx 配置反代理的 qbit 。pbh.hz.xxxx.xx 反代的 peerbanhelper ,都能正常使用(当时我用的 nginx porxy manager )
    lao66
    lao66
    Dec 3, 2024 via iPhone
    28
    加端口号不行?
    maninnet
    maninnet
    OP
    Dec 3, 2024 via iPhone
    29
    @zxabition 那是需要配置一个*.sub.abc.com 的 ip 指向我的机器,后面 3 级域名的命名都在 nginx 配置就可以了吧?
    maninnet
    maninnet
    OP
    Dec 3, 2024 via iPhone
    30
    @lao66 可以,但是这个域名是备案过的,端口也不好寄
    maninnet
    maninnet
    OP
    Dec 3, 2024 via iPhone
    31
    @akabk 没有看过文档…我试一下,不过还是没有解决跟其他服务共存的问题。
    zxabition
    zxabition
    Dec 3, 2024
    32
    @maninnet 是的。

    https://img.picui.cn/free/2024/12/03/674e7c3e4679a.png

    不会上传图,凑合着看吧
    cpstar
    cpstar
    Dec 3, 2024
    33
    少用路径反代,如果下游系统用了绝对地址,那就是恶心他妈给恶心开门。
    shalingye
    shalingye
    Dec 3, 2024
    34
    最近做过,放弃吧,设置多个子域名对应不同服务,js 或者 python 随便写的服务没办法走域名路径的
    iorilu
    iorilu
    Dec 3, 2024
    35
    那就用三级域名阿, 有什么区别吗

    都是给开发人员用的, 又不是让用户用
    shalingye
    shalingye
    Dec 3, 2024
    36
    一个域名而已,值多少钱?自己用的买个 6 块的 xyz ,时间宝贵杜绝浪费
    qfchannel
    qfchannel
    Dec 3, 2024
    37
    nas alist……随便找个免费的垃圾域名挂了不就完了,这么折腾干啥,自用也想那么讲究为啥不直接买个自己的域名
    pkoukk
    pkoukk
    Dec 3, 2024
    38
    用不同的端口就行,本身家宽开 80 和 443 就是作死行为
    sub.abc.com:5000 -> NAS
    sub.abc.com:5244 -> ALIST
    azc1NDk5OTgwMA
    azc1NDk5OTgwMA
    Dec 3, 2024
    39
    之前搞反代的时候上网找了资料,如果是前后端路径写死的话得用 location + rewrite ,但是反代的一多就乱起来了,最后还是用了 subdomain
    TomCN
    TomCN
    Dec 3, 2024
    40
    我之前用笔记本装过一个飞牛 OS(后面性能不够就没使用了),想过一个方案,使用 Cookie 来标记当前访问的站点,然后每次根据 Cookie 来判断

    server {
    listen 80;
    server_name example.com;

    # 处理 /a 和 /b ,设置 Cookie 并重定向到 /
    location = /a {
    add_header Set-Cookie "current-site=a; Path=/; HttpOnly; Max-Age=3600";
    return 302 /;
    }

    location = /b {
    add_header Set-Cookie "current-site=b; Path=/; HttpOnly";
    return 302 /;
    }

    # 处理 /
    location / {
    # 根据 Cookie 值选择代理目标
    if ($http_cookie ~* "current-site=a") {
    proxy_pass http://localhost:3000/;
    break;
    }

    if ($http_cookie ~* "current-site=b") {
    proxy_pass http://localhost:4000/;
    break;
    }

    # 如果没有 Cookie ,返回 404
    return 404;
    }
    }


    不知道是否可行,不过有一定的副作用,比如不能 a 和 b 同时在一个浏览器中访问,每次访问另一个站点需要先使用路径切换一下,两个站点的路径不能起冲突
    dfdd1811
    dfdd1811
    Dec 3, 2024
    41
    我记得之前我捣鼓 list 的时候也想这样,但是他软件不支持再加后缀。很多软件都需要支持才行。所以我现在起服务要么就直接用端口访问,非要洁癖,就单开个二级域名,申请新证书,反正也是自动续期
    phenixc
    phenixc
    Dec 3, 2024
    42
    nas 和 alist 使用端口访问,sub.abc.com 指向 lucky666 所在服务器,使用 lucky666 的 web 反向代理让 sub.abc.com/alist 指向 alist 服务所在地址和端口应该可以解决。不过我更偏向于使用 alist.sub.abc.com
    lovelylain
    lovelylain
    Dec 3, 2024 via Android
    43
    子路径就这样,要么服务本身支持子路径,要么 sub_filter 替换,为什么会有 sub_filter 这么麻烦的方式,因为没有更好的办法,你都替换了一半而且看到效果了,继续换吧,或者查查服务有没有提供编译或者配置选项支持子路径。
    xuanbg
    xuanbg
    Dec 3, 2024
    44
    只有一个二级域名的话,你应该一开始就该规划好子目录,然后再写代码。不然你怎么配置 nginx 都会有一些无解的问题。
    Tink
    Tink
    Dec 3, 2024
    45
    nginx
    zwgf
    zwgf
    Dec 3, 2024
    46
    用端口
    zuotun
    zuotun
    Dec 3, 2024
    47
    只能再买几个域名或者用端口号区分,你这样做工作量巨大而且很容易出问题。不是大家没有这种需求,而是子域名又不要多花钱,何必做成 All in one 呢?
    当然也有解决方案,配合一些奇技淫巧完全可以实现访问同一个网址展示完全不同的页面,但这样搞你肯定是不打算给其他人用了,这样一来还不如改端口号来的方便实在。
    InDom
    InDom
    Dec 3, 2024
    48
    给一个笨笨的方案,但这个方案可能不能做到同时访问。

    使用 service worker 技术,拦截 fetch 请求。

    fetch 请求增加一个 header 头,指引 nginx 反向代理到哪个服务。

    比如你打开 sub.exmaple.com/nas 后 worker 中记录下当前要访问 nas ,然后跳转回 sub.exmaple.com ,worker 中的 fetch 请求时就带上 nas 的标记,nginx 收到请求后只反向代理到 nas 后端。
    duanxianze
    duanxianze
    Dec 3, 2024
    49
    不同的端口反向代理啊
    skyadmin
    skyadmin
    Dec 3, 2024
    50
    买个域名几十块的事情,买个自己独有的,干啥都方便
    sharper
    sharper
    Dec 3, 2024
    51
    能不能给个*.sub 的记录
    hatsuyuki
    hatsuyuki
    Dec 3, 2024
    52
    https://freedns.afraid.org/subdomain/

    这个网站最多免费提供 5 个二级域名
    realpg
    realpg
    Dec 3, 2024
    53
    什么做互联网项目的公司?竟然没有几个十年已备案域名储备?
    dream10201
    dream10201
    Dec 3, 2024
    54
    买个域名吧,首年几块钱
    jslang
    jslang
    Dec 3, 2024
    55
    akabk 是正解,我这边 alist 可以给你参考

    nginx.conf
    location /alist/ {
    proxy_pass http://localhost:5244;
    }

    docker-compose.yml
    alist:
    container_name: alist
    environment:
    TZ: Asia/Shanghai
    SITE_URL: https://s.fyi/alist
    image: xhofe/alist:latest
    ports:
    - 5244:5244
    cominghome
    cominghome
    Dec 3, 2024
    56
    用目录转发首先得你的应用支持,最简单的例子,你的静态资源得使用相对路径而非绝对路径。用不同端口能接受吗?
    z7356995
    z7356995
    Dec 3, 2024
    57
    6 位数字域名.xyz 一美元一年我买了 10 年也不过 80 元,时间珍贵,能用钱解决,不要浪费时间
    sagaxu
    sagaxu
    Dec 3, 2024
    58
    首次访问 sub.abc.com/xxx 时,把实际路径 xxx 写入 Cookie ,后续请求根据 Cookie 重写路径
    ala2008
    ala2008
    Dec 3, 2024
    59
    这不是很常见的 nginx 配置吗,转发或重定向
    PeiXyJ
    PeiXyJ
    Dec 3, 2024
    60
    最烦的就是 前端的页面指向就是 /static/xxxx.jpg 用 nginx 代理基本无效.
    SenLief
    SenLief
    Dec 3, 2024
    61
    最简单的办法是让域名提供的把二级域名让你自己托管。
    SenLief
    SenLief
    Dec 3, 2024
    62
    @ala2008 前端不适配,把静态文件路由写死了
    ala2008
    ala2008
    Dec 3, 2024
    63
    @SenLief 也有这种情况,弄个子域名吧
    HangoX
    HangoX
    Dec 3, 2024
    64
    简单一点?如果只是自己用,修改本地的 host 文件,想要啥域名就要啥域名
    shxxy
    shxxy
    Dec 3, 2024❤️1
    65
    用 Referer 判断就行,我用的 Caddy

    @alist header Referer https://your.domain.com/alist*
    handle @alist {
    uri strip_prefix /alist
    reverse_proxy 127.0.0.1:5244 {
    @redir status 301 302 308
    handle_response @redir {
    header >Location "(.*)" "/alist$1"

    copy_response
    }
    }
    }
    charce
    charce
    Dec 3, 2024
    66
    1 、用不同的端口是最直接的;
    2 、如果要用 subfolder 记忆网址的话,是不是可以用 url 跳转;(我就自己部署了 YOURLS 用来跳转)
    gjnevergo
    gjnevergo
    Dec 3, 2024
    67
    简单点 就是子域名 在二级域名配 DNS A record 直接解析请求过去
    lizhq
    lizhq
    Dec 3, 2024❤️1
    68
    nginx 代理一下就可以了吧

    ps: 来我给你开一些二级域名给你用
    nextvay
    nextvay
    Dec 3, 2024
    69
    感觉你是 js 文件有问题,xx/alist 访问首页,里面 js 可能是 xx/js ,自己玩的话,可以考虑油猴写个脚本,把所有的 js 增加个前缀
    duhbbx1119
    duhbbx1119
    Dec 3, 2024
    70
    配代理就可以了吧,没看出来难点在哪儿?
    之前搞 to G 的项目,花式配 nginx,现在不行了
    GBdG6clg2Jy17ua5
    GBdG6clg2Jy17ua5
    Dec 3, 2024
    71
    楼上说的都太复杂了。关键词是 NS 记录。
    1.比如你的腾讯云 dns ,你朋友用的阿里云 dns 。
    2.你可以在腾讯 dns 里创建子域名 sub.abc.com ,后面直接按腾讯云提示操作就行了。
    你朋友只需两步:配置一个 txt 记录用于腾讯云验证你有这个三级域名权限,一条 sub.abc.com 指向你的腾讯域名 ns 服务
    这样,你就可以在腾讯云自由创建无限个四级域名了。
    512357301
    512357301
    Dec 3, 2024 via Android
    72
    alist 是支持路径反代的参数好像叫 site_url ,具体看文档去。
    你说的 nas 应该是说 nas 首页吧,首页其实没必要反代,直接访问就行,如果/被占用了,必须反代的话,得先看看 nas 首页支持不支持
    smarthing
    smarthing
    Dec 4, 2024 via Android
    73
    alist 可以按照这个文档配置 https://alist.nn.ci/faq/howto.html#how-to-reverse-proxy-with-sub-directory

    关于用域名还是路径来区分不同 HTTP 服务的问题,优选域名最简单,但是那种通配符证书只适用于一级子域名,二级子域名不生效。

    另外,只要 HTTP 服务不把路径写成绝对路径,比如引用的文件用 ./xx.js 而不用 /xx.js ,基本问题不大。
    smarthing
    smarthing
    Dec 4, 2024 via Android
    74
    在这里顺便吐槽一下 tplink 路由器管理界面,狗日的资源文件引用地址是 ../web/xx.js
    Laysan
    Laysan
    Dec 4, 2024
    75
    给你个参考
    ronyin
    ronyin
    Dec 4, 2024
    76
    为啥不能再买个域名。。。。。
    512357301
    512357301
    Dec 4, 2024 via Android
    77
    @maninnet #3 如果是飞牛的二级域名的话,别折腾了,那域名你控制不了,飞牛内置的 nginx 被保护了,也改不了。
    用贝锐蒲公英吧,不用买它的路由器哈!免费版 4M3 设备。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1402 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 121ms · UTC 20:21 · PVG 04:21 · LAX 12:21 · JFK 15:21
    ♥ Do have faith in what you're doing.