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

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

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

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

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

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

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

© 2021 V2EX