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

location + proxy_pass

不要 subfolder 容易出问题,建议 sub domain 。nginz 配不来可以使用 Nginx proxy manager ,比较无脑

我就是这样,不行,首页可以,后面的请求 host 还是 sub.abc.com ,filebname 还是原来的相对路径,我通过 sub_filter 替换,部分可以,但是动态生成的路径就无能为力了。

我只有一个二级域名啊,这个域名不是我的,是其他人提供给我的,我没有权限配置 dns 解析。

我也想知道,以前自己也想搞但没搞好,最后还是用了不同的域名来解决

你请求没办法改的话,无解。我遇到过这种的,基本上要么改代码,要么多域名。

网上查了挺久,问了几个 ai 都解决不了,上来问问有没有人这么配置过的…难道大家都没有这种需求吗?

代码是改不了的…只能麻烦别人配置多个域名了,改 IP 也很麻烦。

sub folder 方式需要下面的程序或者至少它用到的 web 框架按照“我知道自己有可能被苦逼的主人放在一个 sub folder 下面,所以有配置选项让我按照 sub folder 来生成 URL”设计过才行,并不是前端反代做了改写就能搞定的

一般都是不同的二级、三级甚至更多级域名对应不同的后端服务

sub.abc.com/alist 和 sub.abc.com/nas 这种都需要 alist 和 nas 应用本身支持 sub url 的,但是往往不是所有的应用都支持

s2.loli.net/2024/12/03/c7VgKeHizd6E38D.png
如图

路径改写不了就试试不同端口吧,反正内部服务自己用不讲究的

通用的这些,如果配置完了还不行,一般就是 JavaScript 里路径写死了类似 “/api”,“/public” 之类的,如果你不改源码,那就看看这些服务里的 js 文件,具体问题具体分析,改 js 文件。
改完一处,部署后发现有那个路径又不对了,再接着改。

试试不同端口吧,反正家用也用不了 80 端口。我 nas 上所有服务都是同一个域名+不同端口区别。

xx.oo/port------------------8080/xxxx 反代到 127.0.0.1:8080/xxxx

按 op 描述的场景问题,端口应该正解

这是正解,得应用本身支持才可以的

OP 没做过 web 开发吧,大多数的系统都不支持调整路径的。
说过故事吧:

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

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

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

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

领导:不行,最多 3 天。

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

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

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

领导:…

(大多数 web 系统在开发前就没规划自定义路径,开发后要自定义路径,修改工作量大,之后基本都是不了了之)

#3 那得前端项目做相应的配置,不是纯代理部分能解决的

建议二选一修改路径,不好改的直接使用 sub.abc.com ,好改的使用 sub.abc.com/alist

让提供域名的人将 *.sub.abc.com 解析到你的机器,你再加一层子域名不就行了。。。

alist.sub.abc.com 指向 alist

nas.sub.abc.com 指向 nas

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

另外,zoraxy 资源占用还小一些。

location ^~ /api {
proxy_pass 127.0.0.1:8085;
proxy_set_header Host $host;
查了下自己的配置,不知道这个$host 改了有没有效?

不知道你是怎么查的,至少 AList 的官方文档有说明。

将 site_url 设置为 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 127.0.0.1:5244/alist/;
# the max size of file to upload
client_max_body_size 20000m;
}

感谢各位解答,我在尝试的时候就意识到需要后端配合了,所以用了 sub_filter 做了部分替换,但是没有办法根本解决。
用 3 级域名的话配合 nginx 可以实现吗?

proxy_pass 转发

可以的,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 )

加端口号不行?

那是需要配置一个*.sub.abc.com 的 ip 指向我的机器,后面 3 级域名的命名都在 nginx 配置就可以了吧?

可以,但是这个域名是备案过的,端口也不好寄

没有看过文档…我试一下,不过还是没有解决跟其他服务共存的问题。

是的。

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

不会上传图,凑合着看吧

少用路径反代,如果下游系统用了绝对地址,那就是恶心他妈给恶心开门。

最近做过,放弃吧,设置多个子域名对应不同服务,js 或者 python 随便写的服务没办法走域名路径的

那就用三级域名阿, 有什么区别吗

都是给开发人员用的, 又不是让用户用

一个域名而已,值多少钱?自己用的买个 6 块的 xyz ,时间宝贵杜绝浪费

nas alist……随便找个免费的垃圾域名挂了不就完了,这么折腾干啥,自用也想那么讲究为啥不直接买个自己的域名

用不同的端口就行,本身家宽开 80 和 443 就是作死行为
sub.abc.com:5000 -> NAS
sub.abc.com:5244 -> ALIST

之前搞反代的时候上网找了资料,如果是前后端路径写死的话得用 location + rewrite ,但是反代的一多就乱起来了,最后还是用了 subdomain