nginx docker 反向代理 作者:马育民 • 2020-07-26 21:29 • 阅读:10116 需要掌握: [正向代理](https://www.malaoshi.top/show_1EF5xZgs8ZHt.html "正向代理") [反向代理](https://www.malaoshi.top/show_1EF5xZmL3Dc6.html "反向代理") # 停止并删除容器 ``` cd /root/docker_nginx ``` ``` docker-compose down ``` # 添加 tomcat 在`/root/docker_nginx`修改`docker-compose.yml`文件 ``` cd /root/docker_nginx ``` ``` vim docker-compose.yml ``` 内容如下: ``` version: '3' services: nginx: image: nginx # 镜像 container_name: nginx # 指定容器名称 networks: - mynet ports: # bridge网络模式,指定映射端口 - "8000:80" # network_mode: "host" # 指定网络模式 restart: always # 当docker服务启动时,容器总是跟着启动 volumes: - /root/docker_nginx/conf.d:/etc/nginx/conf.d tomcat1: image: tomcat # 镜像 container_name: tomcat1 # 指定容器名称 networks: - mynet #ports: # bridge网络模式,指定映射端口 # - "8000:80" # network_mode: "host" # 指定网络模式 restart: always # 当docker服务启动时,容器总是跟着启动 networks: mynet: ``` 启动 ``` docker-compose up -d ``` ### 为什么不用docker run 启动tomcat 因为通过 docker-compose启动的容器 与 通过下面命令启动的容器 ``` docker run -d --name=tomcat_test tomcat ``` 其2个容器的ip网段可能不同,无法直接访问 如果通过`docker run`启动容器时,需要 **指定ip地址** 或者 **指定网络** ### 修改tomcat容器中的webapps目录 由于当前版本的tomcat的webapps目录下是空的,需要做处理,见: https://www.malaoshi.top/show_1EF5k2qNG471.html ### 测试 由于启动tomcat时没有指定映射端口,所以只能在宿主机中,通过 **容器内部ip** 访问tomcat ##### 查看该容器ip ``` docker inspect tomcat_test ``` 在执行结果中找到下面部分: ``` "IPAddress": "172.23.0.2", ``` ##### 在宿主机通过 curl 访问tomcat ``` curl http://172.23.0.2:8080/ ``` 访问的结果是html代码,如下: [![](https://www.malaoshi.top/upload/pic/nginx/QQ20200726-220541.png)](https://www.malaoshi.top/upload/pic/nginx/QQ20200726-220541.png) # 配置反向代理 通过配置反向代理,其他机器 通过 反向代理服务器,访问tomcat服务器 备份`default.conf`文件 ``` cd /root/docker_nginx/conf.d ``` ``` cp default.conf default.conf.bak ``` ### 修改`default.conf`文件 ``` vim default.conf ``` 内容如下: ``` server { listen 80; # 监听所有ipv4的80端口 # listen [::]:00; # 监听所有ipv6的80端口 server_name localhost; # 匹配域名。主机绑定多个域名时使用 #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { # 通用匹配路径 proxy_pass http://tomcat1:8080/; # 反向代理 } } ``` **注意:** `proxy_pass http://tomcat1:8080/;`这里`tomcat1`是容器名 nginx、tomcat容器使用相同网络`mynet `,所以可以通过 **容器名** 访问 # 重新加载 or 重启 ### 重新加载配置文件 如果不想重启nginx docker,那么需要进入容器,重新加载配置文件 ``` docker exec -it nginx bash ``` ``` nginx -s reload ``` ### 重启nginx docker 重启的方式,比重新加载要简单些 ``` docker-compose restart ``` # 测试 访问 http://106.13.165.100:8000/ 显示tomcat首页 原文出处:http://malaoshi.top/show_1EF5xcIRyEtY.html