我手上只有一个二级域名 sub.abc.com ,但我有一个 alist 和 nas 的 http 服务想通过这个二级域名进行访问,比如 sub.abc.com/alist 和 sub.abc.com/nas 分别访问 alist 和 nas 的管理后台,我尝试通过 nginx 配置 location 的 rewrite 和 sub_filter 都没办法解决,请问有什么解决办法吗?
1
DesnLee 8 天前
location + proxy_pass
|
2
kumiko 8 天前 via Android 1
不要 subfolder 容易出问题,建议 sub domain 。nginz 配不来可以使用 Nginx proxy manager ,比较无脑
|
3
maninnet OP @DesnLee 我就是这样,不行,首页可以,后面的请求 host 还是 sub.abc.com ,filebname 还是原来的相对路径,我通过 sub_filter 替换,部分可以,但是动态生成的路径就无能为力了。
|
5
esee 8 天前
我也想知道,以前自己也想搞但没搞好,最后还是用了不同的域名来解决
|
6
Tiller 8 天前
你请求没办法改的话,无解。我遇到过这种的,基本上要么改代码,要么多域名。
|
9
adoal 8 天前 7
sub folder 方式需要下面的程序或者至少它用到的 web 框架按照“我知道自己有可能被苦逼的主人放在一个 sub folder 下面,所以有配置选项让我按照 sub folder 来生成 URL”设计过才行,并不是前端反代做了改写就能搞定的
|
10
lazyyz 8 天前 via Android
一般都是不同的二级、三级甚至更多级域名对应不同的后端服务
|
11
anonydmer 8 天前 4
sub.abc.com/alist 和 sub.abc.com/nas 这种都需要 alist 和 nas 应用本身支持 sub url 的,但是往往不是所有的应用都支持
|
13
aaronkk 8 天前
路径改写不了就试试不同端口吧,反正内部服务自己用不讲究的
|
14
jifengg 8 天前
通用的这些,如果配置完了还不行,一般就是 JavaScript 里路径写死了类似 “/api”,“/public” 之类的,如果你不改源码,那就看看这些服务里的 js 文件,具体问题具体分析,改 js 文件。
改完一处,部署后发现有那个路径又不对了,再接着改。 |
15
windstill 8 天前
试试不同端口吧,反正家用也用不了 80 端口。我 nas 上所有服务都是同一个域名+不同端口区别。
|
16
xiangyuecn 8 天前
https://xx.oo/port------------------8080/xxxx 反代到 http://127.0.0.1:8080/xxxx
|
19
yinmin 8 天前 via iPhone 1
OP 没做过 web 开发吧,大多数的系统都不支持调整路径的。
说过故事吧: 领导:李工,你们团队开发系统测试都过了,准备上线。哦,上线的路径是 /某某路径/ 李工:啊! 不行。这个需求为什么不在开发前提出来,现在都已经开发测试完成了,改路径要重新返工,工作量巨大,还要重新测试,开发+测试最起码要 2 周时间。 领导:你们开发的时候就要考虑部署到不同的路径,为什么要返工? 李工:你看系统需求文档里就没有这条啊,现在说了,我们要检查每个页面程序,几十万行代码重新过一遍,最起码要 3-5 天,然后再全功能测试,再修 bug ,再测,2 周都很紧张,要天天加班。 领导:不行,最多 3 天。 李工:要尊重科学啊,工作量这么大,不可能完成啊。要么,换成子域名不改路径,今天就能上线。 领导:子路径和子域名有什么差别啊?叫网管部的小张过来 小张:子路径和子域名没啥区别,我 dns 配置一下,几分钟搞定。 领导:… (大多数 web 系统在开发前就没规划自定义路径,开发后要自定义路径,修改工作量大,之后基本都是不了了之) |
21
dode 8 天前
建议二选一修改路径,不好改的直接使用 sub.abc.com ,好改的使用 sub.abc.com/alist
|
22
zxabition 8 天前
让提供域名的人将 *.sub.abc.com 解析到你的机器,你再加一层子域名不就行了。。。
alist.sub.abc.com 指向 alist nas.sub.abc.com 指向 nas 题外话:推荐使用 zoraxy 。nginx porxy manager 的 aems.sh 我用着有些问题,证书申请不下来,zoraxy 没啥问题。 另外,zoraxy 资源占用还小一些。 |
23
slowhand 8 天前
location ^~ /api {
proxy_pass http://127.0.0.1:8085; proxy_set_header Host $host; 查了下自己的配置,不知道这个$host 改了有没有效? |
24
akabk 8 天前
不知道你是怎么查的,至少 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; } |
25
maninnet OP 感谢各位解答,我在尝试的时候就意识到需要后端配合了,所以用了 sub_filter 做了部分替换,但是没有办法根本解决。
@zxabition 用 3 级域名的话配合 nginx 可以实现吗? |
26
likai 8 天前
proxy_pass 转发
|
27
zxabition 8 天前
可以的,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 ) |
28
lao66 8 天前 via iPhone
加端口号不行?
|
29
maninnet OP @zxabition 那是需要配置一个*.sub.abc.com 的 ip 指向我的机器,后面 3 级域名的命名都在 nginx 配置就可以了吧?
|
32
zxabition 8 天前
|
33
cpstar 8 天前
少用路径反代,如果下游系统用了绝对地址,那就是恶心他妈给恶心开门。
|
34
shalingye 8 天前
最近做过,放弃吧,设置多个子域名对应不同服务,js 或者 python 随便写的服务没办法走域名路径的
|
35
iorilu 8 天前
那就用三级域名阿, 有什么区别吗
都是给开发人员用的, 又不是让用户用 |
36
shalingye 8 天前
一个域名而已,值多少钱?自己用的买个 6 块的 xyz ,时间宝贵杜绝浪费
|
37
qfchannel 8 天前
nas alist……随便找个免费的垃圾域名挂了不就完了,这么折腾干啥,自用也想那么讲究为啥不直接买个自己的域名
|
38
pkoukk 8 天前
|
39
azc1NDk5OTgwMA 8 天前
之前搞反代的时候上网找了资料,如果是前后端路径写死的话得用 location + rewrite ,但是反代的一多就乱起来了,最后还是用了 subdomain
|
40
TomCN 8 天前
我之前用笔记本装过一个飞牛 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 同时在一个浏览器中访问,每次访问另一个站点需要先使用路径切换一下,两个站点的路径不能起冲突 |
41
dfdd1811 8 天前
我记得之前我捣鼓 list 的时候也想这样,但是他软件不支持再加后缀。很多软件都需要支持才行。所以我现在起服务要么就直接用端口访问,非要洁癖,就单开个二级域名,申请新证书,反正也是自动续期
|
42
phenixc 8 天前
nas 和 alist 使用端口访问,sub.abc.com 指向 lucky666 所在服务器,使用 lucky666 的 web 反向代理让 sub.abc.com/alist 指向 alist 服务所在地址和端口应该可以解决。不过我更偏向于使用 alist.sub.abc.com
|
43
lovelylain 8 天前 via Android
子路径就这样,要么服务本身支持子路径,要么 sub_filter 替换,为什么会有 sub_filter 这么麻烦的方式,因为没有更好的办法,你都替换了一半而且看到效果了,继续换吧,或者查查服务有没有提供编译或者配置选项支持子路径。
|
44
xuanbg 8 天前
只有一个二级域名的话,你应该一开始就该规划好子目录,然后再写代码。不然你怎么配置 nginx 都会有一些无解的问题。
|
45
Tink 8 天前
nginx
|
46
zwgf 8 天前
用端口
|
47
zuotun 8 天前
只能再买几个域名或者用端口号区分,你这样做工作量巨大而且很容易出问题。不是大家没有这种需求,而是子域名又不要多花钱,何必做成 All in one 呢?
当然也有解决方案,配合一些奇技淫巧完全可以实现访问同一个网址展示完全不同的页面,但这样搞你肯定是不打算给其他人用了,这样一来还不如改端口号来的方便实在。 |
48
InDom 8 天前
给一个笨笨的方案,但这个方案可能不能做到同时访问。
使用 service worker 技术,拦截 fetch 请求。 fetch 请求增加一个 header 头,指引 nginx 反向代理到哪个服务。 比如你打开 sub.exmaple.com/nas 后 worker 中记录下当前要访问 nas ,然后跳转回 sub.exmaple.com ,worker 中的 fetch 请求时就带上 nas 的标记,nginx 收到请求后只反向代理到 nas 后端。 |
49
duanxianze 8 天前
不同的端口反向代理啊
|
50
skyadmin 8 天前
买个域名几十块的事情,买个自己独有的,干啥都方便
|
51
starck 8 天前
能不能给个*.sub 的记录
|
52
hatsuyuki 8 天前
|
53
realpg 8 天前
什么做互联网项目的公司?竟然没有几个十年已备案域名储备?
|
54
dream10201 8 天前
买个域名吧,首年几块钱
|
55
jslang 8 天前
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 |
56
cominghome 8 天前
用目录转发首先得你的应用支持,最简单的例子,你的静态资源得使用相对路径而非绝对路径。用不同端口能接受吗?
|
58
sagaxu 8 天前
首次访问 sub.abc.com/xxx 时,把实际路径 xxx 写入 Cookie ,后续请求根据 Cookie 重写路径
|
59
ala2008 8 天前
这不是很常见的 nginx 配置吗,转发或重定向
|
60
PeiXyJ 8 天前
最烦的就是 前端的页面指向就是 /static/xxxx.jpg 用 nginx 代理基本无效.
|
61
SenLief 8 天前
最简单的办法是让域名提供的把二级域名让你自己托管。
|
64
HangoX 8 天前
简单一点?如果只是自己用,修改本地的 host 文件,想要啥域名就要啥域名
|
65
qwq11 8 天前 1
用 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 } } } |
66
charce 8 天前
1 、用不同的端口是最直接的;
2 、如果要用 subfolder 记忆网址的话,是不是可以用 url 跳转;(我就自己部署了 YOURLS 用来跳转) |
67
gjnevergo 8 天前
简单点 就是子域名 在二级域名配 DNS A record 直接解析请求过去
|
68
lizhq 8 天前 1
nginx 代理一下就可以了吧
ps: 来我给你开一些二级域名给你用 |
69
nextvay 8 天前
感觉你是 js 文件有问题,xx/alist 访问首页,里面 js 可能是 xx/js ,自己玩的话,可以考虑油猴写个脚本,把所有的 js 增加个前缀
|
70
duhbbx1119 8 天前
配代理就可以了吧,没看出来难点在哪儿?
之前搞 to G 的项目,花式配 nginx,现在不行了 |
71
angryfish 8 天前
楼上说的都太复杂了。关键词是 NS 记录。
1.比如你的腾讯云 dns ,你朋友用的阿里云 dns 。 2.你可以在腾讯 dns 里创建子域名 sub.abc.com ,后面直接按腾讯云提示操作就行了。 你朋友只需两步:配置一个 txt 记录用于腾讯云验证你有这个三级域名权限,一条 sub.abc.com 指向你的腾讯域名 ns 服务 这样,你就可以在腾讯云自由创建无限个四级域名了。 |
72
512357301 8 天前 via Android
alist 是支持路径反代的参数好像叫 site_url ,具体看文档去。
你说的 nas 应该是说 nas 首页吧,首页其实没必要反代,直接访问就行,如果/被占用了,必须反代的话,得先看看 nas 首页支持不支持 |
73
smarthing 7 天前 via Android
alist 可以按照这个文档配置 https://alist.nn.ci/faq/howto.html#how-to-reverse-proxy-with-sub-directory
关于用域名还是路径来区分不同 HTTP 服务的问题,优选域名最简单,但是那种通配符证书只适用于一级子域名,二级子域名不生效。 另外,只要 HTTP 服务不把路径写成绝对路径,比如引用的文件用 ./xx.js 而不用 /xx.js ,基本问题不大。 |
74
smarthing 7 天前 via Android
在这里顺便吐槽一下 tplink 路由器管理界面,狗日的资源文件引用地址是 ../web/xx.js
|
75
Laysan 7 天前
|
76
ronyin 7 天前
为啥不能再买个域名。。。。。
|