docker nginx 正确的使用姿势是什么?

感谢各位的回答,统一回答一下:代码变动为何要重启nginx?
典型场景,基于nginx的微服务。
a.service.com:80
b.service.com:80
服务代码升级肯定有变动,有变动肯定要重启服务,a和b之间肯定不能互相影响。
(至于为什么是基于nginx的微服务,这不是重点。)

目前用的云服务供应商的容器服务是可以配置就好,全是80端口可以访问,但是我想知道自己实现如何实现的。

**我不知道有人踩一下一个问题的原因是什么?
这个问题有什么问题请指出来好吗?**

阅读 23.5k
6 个回答

我不明白的是,代码变动为何要重启nginx。
如果让每个容器都映射到80绝对是有冲突的,建议你使用负载均衡或反向代理去完成你想要的实现。

运行一个nginx容器,将配置文件挂载进去即可。

你可以每个虚拟主机定义一个单独的.conf配置文件,把整个目录挂载到容器中的/etc/nginx/conf.d/即可

讲道理,a和b肯定是互不影响的,因此肯定是将a和b分别放到两个nginx里面,我觉得这句不太对(个人理解),放一个容器也没有问题的吧,不使用Docker时,Nginx通常也用于代理多个服务。说放一起相互影响,那么前端挂一个代理,去分别代理a和b两个服务,那么在代理这一层,两者不也会相互影响么。

docker启动一个nginx容器监听80,然后启动一个8080端口的容器a和8081容器的b,在用nginx的配置文件里监听访问的域名然后分发到不同的端口,html和js改动了不用重启的

这个需求用nginx-proxy就可以完美解决了

github地址

先启动nginx-proxy给它80、443端口

然后后续有容器要对外服务并有域名的时候,环境变量加个VIRTUAL_HOST就行了

具体用法详见github

搞不懂问什么,不过:

我现在有两个sites:a.com,b.com 都放到容器里面。
讲道理,a和b肯定是互不影响的,因此肯定是将a和b分别放到两个nginx里面。
但是又不能同时映射到80端口,请问应当如何解决?

1个 nginx 即可,可以同时使用 80 端口。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进