容器中的 nginx 正确反代其它容器的姿势是什么?

8 天前
 nyxsonsleep

nginx 在 N 容器上,N 容器位于 docker networks 中的 Nnet 网络上。

A 是一个服务,同样位于 Nnet 网络内,开放了 10086 端口,该服务默认情况下未独立配置 https 。

  1. 如果 nginx 想要反代 A ,应该指向哪个 ip ?如果两个容器不在同一个 docker networks 中有区别吗?
  2. 是不是只需要配置 nginx 的 tls ,加上反代就能保证访问反代到的 https 的 A 服务。
1279 次点击
所在节点    问与答
17 条回复
imdong
8 天前
不使用 IP ,直接指向容器名。
yinmin
8 天前
最稳定和安全的方式:N 容器和 A 容器都设置固定 ip 地址( Nnet 网络下的),nginx 指向 A 容器的固定 ip 。不用将 A 的 tcp 端口-p 映射出来。

nginx 上部署 https 即可,A 容器直接 http 没必须 https 。
yinmin
8 天前
我不喜欢在 nginx 里配置容器名,因为有些极端情况下,会发生容器名解析 ip 错误导致 nginx 不正常。在容器启动参数里加固定 ip 最为稳定。
oneisall8955
8 天前

指定容器名称,127.0.0.11 是 docker 的 dns ip
esee
8 天前
nginx 反代 宿主机的 IP 不行么?
daniel8642
8 天前
都用 docker 了,要不试试 traefik 。
单机部署的话,用 docker compose 配置容器,
反代配置直接写在 docker compose 的 Label 配置里面。

我之前是在主机上装的 nginx ,就是担心容器内网络转发配置太复杂混乱了。
最近服务器快到期,准备重新倒腾一下。
cookii
8 天前
nginx 用 host 模式,直接指向暴露出来的 localhost:端口
nyxsonsleep
8 天前
@esee #5 原因有 2 点:
1. 我用了 NginxProxyManager ,反代宿主机 IP 结果只有配置 http 的情况下可以访问,否则 502 ,不知为什么。
2. 宿主机 ip 应该只会放开 80 和 443 端口,其它端口不打算继续放开,目前仅测试功能。(实际情况有点复杂,但可以这么理解。
nyxsonsleep
8 天前
@cookii #7 网安不允许。容器镜像是特制的,有检测工具。
povsister
8 天前
听说过 Ingres controller 吗
nyxsonsleep
8 天前
@imdong #1 我能在容器中访问到对应的同 docker net 网络中其它容器的端口,但是在 nginx 和 caddy 中无法反代访问到。
esee
8 天前
@nyxsonsleep 宿主机的 IP ,不是公网 IP ,宿主机的 IP 对外开放几个端口,都不影响你反代到宿主机的端口啊。都还没到防火墙呢。
dusu
8 天前
宿主机配个回环地址 例如 10.0.0.1
SenLief
8 天前
bridge 模式,把所有的容器都添加到同一个网络中,npm 也要添加进去,然后用 容器名:端口 连接
evada
8 天前
nginx 和 A 服务在一个 docker 网络不是可以直接访问容器名吗?
server {
listen 443 ssl;
listen [::]:443;
server_name 127.0.0.1;

# security
include nginxconfig.io/security.conf;
# 指定 ssl 证书路径
ssl_certificate xxx.com.cn_server.crt;
# 指定私钥文件路径
ssl_certificate_key xxx.com.cn_server.key;

# logging
access_log /var/log/nginx/access.log combined buffer=512k flush=1m;
error_log /var/log/nginx/error.log warn;

# reverse proxy
location / {
proxy_pass http://A:10086;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_redirect off;
include nginxconfig.io/proxy.conf;
}
}
jpyl0423
8 天前
nginx 容器和目标容器在同一个 docker network 上就行,nginx 直接指向目前容器名字
lianglianglee
8 天前

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

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

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

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

© 2021 V2EX