使用 nginx 反向代理多个 docker 容器

栏目: 编程工具 · 发布时间: 6年前

内容简介:之前介绍 docker 的时候说过它的优势之一,就是可以在同一服务器中搭建多个环境,互相隔离。昨天就实际操作下,万万没想到如此多的坑,比之前从零开始搭建服务器都费时间。变换了好几种方案,最终还是解决了,中间的心酸就忽略吧,直接说操作方法。服务器中已存在的是 laradock 镜像,可以运行 laravel 环境以及其他的 PHP,包含了 nginx、mysql、redis 等。我的想法是再添加一个 nginx 容器,用来做反向代理。根据子域名进行分发,可以分发给 laradock,也可以给其他任何容器(包括

导语

之前介绍 docker 的时候说过它的优势之一,就是可以在同一服务器中搭建多个环境,互相隔离。昨天就实际操作下,万万没想到如此多的坑,比之前从零开始搭建服务器都费时间。变换了好几种方案,最终还是解决了,中间的心酸就忽略吧,直接说操作方法。

架构

服务器中已存在的是 laradock 镜像,可以运行 laravel 环境以及其他的 PHP,包含了 nginx、 mysqlredis 等。

我的想法是再添加一个 nginx 容器,用来做反向代理。根据子域名进行分发,可以分发给 laradock,也可以给其他任何容器(包括 wordpress、 python 、java)等等

修改 lradock

要修改的只有一个地方,就是 nginx 监听的端口。

  1. 进入到 laradock 目录中
  2. 修改 .env 文件,修改 NGINX_HOST_HTTP_PORT 值由 808000
  3. 停止 nginxdocker-compose stop nginx
  4. 重装 nginxdocker-compose build nginx
  5. 启动 docker-compose up -d nginx

这个时候在浏览器中是不能访问成功的,因为 nginx 已经不再监听 80 端口。

添加 nginx 容器

新添加一个 nginx 容器用来做反向代理。在安装 laradock 的时候,已经有了 nginx:alpine 的镜像,可以直接生成容器。当然你也可以重新 pull 一个新的镜像。(推荐使用 alpine 版本)

  1. 查看 nginx 镜像 ID, docker iamges
  2. 生成新的 ngixn 容器, docker run --name proxy_nginx -p 80:80 -d [nginx image id] 。也可以添加 -v 参数来映射配置文件,我的环境较少变动就不需要了
  3. 此时在浏览器中访问,应该是 nginx 的默认页面,说明启动成功
  4. 进入到生成的容器中 docker exec -it proxy_nginx sh
  5. 安装 vimapk add vim
  6. 查看宿主机 ip, /sbin/ip route|awk '/default/ { print $3 }'
  7. /etc/nginx/conf.d/ 目录下添加新配置文件 laradock.conf ,内容如下
server {
    listen  80;
    server_name  you_sits;

    location / {
        proxy_set_header  Host  $http_host;
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass  http://[宿主机IP]:8000;
    }
}
  1. 退出容器,然后重启 docker restart proxy_nginx
  2. 打开 8000 端口,参考这里

结语

这个时候访问的话,就可以代理到 laradock 中的 nginx 了。后续想要新增其他的容器,只要在 proxy_nginx 中添加新的代理规则就可以了。

参考资料: 【转载】记一次用 Docker 运行 Nginx 容器做域名反向代理时踩的坑如何从容器内部获取主机IP


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Programming Concurrency on the JVM

Programming Concurrency on the JVM

Venkat Subramaniam / The Pragmatic Bookshelf / 2011-6-1 / USD 35.00

Concurrency on the Java platform has evolved, from the synchronization model of JDK to software transactional memory (STM) and actor-based concurrency. This book is the first to show you all these con......一起来看看 《Programming Concurrency on the JVM》 这本书的介绍吧!

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具