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

2024-08-18 05:03:45 +08:00
 nianlifeixing
背景:
现在有一个域名: 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+端口么、大家都没遇到过么
2089 次点击
所在节点    问与答
15 条回复
PolarBears
2024-08-18 05:31:03 +08:00
使用二级域名就没有这个问题了
jackOff
2024-08-18 05:35:17 +08:00
楼上正解,以前用宝塔搭服务就是这样子玩的,主要工作就是把一些灰产项目隐藏在正常的业务路由里
chenluo0429
2024-08-18 08:08:39 +08:00
实际上需要部署的服务本身支持才行,资源文件使用相对目录,支持设置 BASE_URL 等等。
rewite 目录确实能做到转写,但是一旦两个服务存在相同的目录资源,你是没办法分清该代理给谁的
facebook47
2024-08-18 09:00:35 +08:00
理论可以,只要你的 URL 有规律可循
sagaxu
2024-08-18 10:10:59 +08:00
通过 path 来区分多个服务,需要你的服务自身支持,例如在配置文件中指定 path ,或者使用相对路径引用资源文件。在服务的配置文件中写入 path ,意味着部署方式影响到了服务自身,也算是某种程度上的耦合。

更好的方式是通过二级域名来区分,服务自身根据 host 拿到自身域名。
DIO
2024-08-18 10:48:11 +08:00
Nginx Proxy Manager ,傻瓜式操作,你值得拥有
yingxiangyu
2024-08-18 10:52:12 +08:00
二级域名+反向代理
oldcai
2024-08-18 10:58:56 +08:00
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
2024-08-18 10:59:23 +08:00
搞个泛解析,这样一个服务一个名字😁
brainzhang
2024-08-18 11:11:15 +08:00
可以的,最简单的办法就是用二级域名,每个 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
2024-08-18 11:53:49 +08:00
rewrite 了解一下
nianlifeixing
2024-08-18 12:47:01 +08:00
@PolarBears 感谢、确实二级域名是最简单省事的
nianlifeixing
2024-08-18 12:47:31 +08:00
@jackOff
@chenluo0429 确实~ 还是二级域名吧、解析太麻烦了😡
nianlifeixing
2024-08-18 12:48:18 +08:00
@sagaxu 是的、docker 服务基本不可控,我还是老老实实二级域名吧
nianlifeixing
2024-08-18 12:50:44 +08:00
@brainzhang 是的、还是二级域名方便 哈哈😆

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1065814

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX