【Nginx】使用Docker完成Nginx反向代理

本文详细介绍了如何在CentOS7系统中安装和配置Docker,然后使用Docker部署Nginx和Tomcat容器。重点讲述了如何创建Nginx配置文件,设置端口映射,处理Nginx和Tomcat的目录挂载,以及通过Nginx进行反向代理,实现通过不同URL路径访问不同Tomcat容器中的应用。最后,文章提到了扩展配置,包括创建更多Tomcat容器和配置Nginx代理多个服务。
摘要由CSDN通过智能技术生成

本机是在CentOS7上面进行操作的

1.首先安装好Dokcer,这里不再赘述

2.Docker安装Nginx容器

2.1首先需要创建Nginx配置文件,之后完成挂载

启动前需要先创建Nginx外部挂载的配置文件( /home/nginx/conf/nginx.conf)
之所以要先创建 , 是因为Nginx本身容器只存在/etc/nginx 目录 , 本身就不创建 nginx.conf 文件
当服务器和容器都不存在 nginx.conf 文件时, 执行启动命令的时候 docker会将nginx.conf 作为目录创建 , 这并不是我们想要的结果 。

  • # 创建挂载目录

  • mkdir -p /home/nginx/conf

  • mkdir -p /home/nginx/log

  • mkdir -p /home/nginx/html

  • # 生成容器

  • docker run --name nginx -p 9001:80 -d nginx

然后将nginx中的配置文件复制到外部环境

# 将容器nginx.conf文件复制到宿主机
docker cp nginx:/etc/nginx/nginx.conf /home/nginx/conf/nginx.conf
# 将容器conf.d文件夹下内容复制到宿主机
docker cp nginx:/etc/nginx/conf.d /home/nginx/conf/conf.d
# 将容器中的html文件夹复制到宿主机
docker cp nginx:/usr/share/nginx/html /home/nginx/

  • # 删除正在运行的nginx容器

  • docker rm -f nginx

2.2重新启动nginx容器

docker run -p 9002:80 --name nginx -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/conf/conf.d:/etc/nginx/conf.d -v /home/nginx/log:/var/log/nginx -v /home/nginx/html:/usr/share/nginx/html -d nginx:latest

命令介绍:
–name nginx    启动容器的名字
-d    后台运行
-p 9002:80    将容器的 9002(后面那个) 端口映射到主机的 80(前面那个) 端口
-v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf    挂载nginx.conf配置文件
-v /home/nginx/conf/conf.d:/etc/nginx/conf.d    挂载nginx配置文件
-v /home/nginx/log:/var/log/nginx    挂载nginx日志文件
-v /home/nginx/html:/usr/share/nginx/html    挂载nginx内容
nginx:latest    本地运行的版本
\    shell 命令换行

2.3浏览器输入http:ip:9002访问,发现是nginx首页,安装成功

3.安装Tomcat镜像

下载tomcat8

docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8

然后进行访问,如果访问不到,原因是

新版tomcat的/bin/bash目录下有webapps和webapps.dist两个目录
webapps里面没有任何东西 total为0,实际有东西的是webapps.dist目录下
rm -rf webapps #删除webapps文件夹
mv webapps.dist webapps #改名为webapps

重启tomcat进行访问,发现可以访问到了

4.配置Nginx文件

效果:访问http://ip:9002/可以看到tomcat的首页

原效果:访问http://ip:9002/看到的是nginx的首页

cd /home/nginx/conf

 在http下面添加如下代码:

server{
       #监听的端口 本例中9002监听nginx80端口,所以这里写80
       listen 80;
       #字符格式
       charset utf-8;
       #当前的服务器ip
       server_name ip;

       location / {
          #要代理去哪个服务器的ip以及端口
          proxy_pass http://ip:8080;
          #被代理服务器返回默认的响应头中的location头域以及refresh头域数值
          proxy_redirect default;
       }
}

重启nginx

docker restart nginx

访问http://ip:9002/可以看到tomcat的首页

5.拓展

要达到的效果:

1.再创建两个tomcat容器,和上面一样进行配置,一个为8081端口,一个为8082端口

2.在这两个tomcat里创建不同的目录,里面放一个html文件

3.配置nginx

4.访问http://ip/edu/a.html访问到的是8081的html

5.访问http://ip/vod/a.html访问到的是8082的html

#创建好两个tomcat容器后,进入容器

docker exec -it 容器ID /bin/bash

cd webapps

mkdir edu #8081端口的容器创建这个,8082的创建名为vod的目录

vim a.html

#如果没有vim则安装一个,其他方法也行,搞个html进去就行

apt-get update

apt-get install vim

a.html 里简单写个<h1>端口号</h1>就行,只是看效果

重启这几个tomcat容器,访问发现成功

最后配置nginx配置文件

http下面添加:

server{
       #监听的端口
       listen 9001;
       #字符格式
       charset utf-8;
       #当前的服务器ip
       server_name ip;

       location ~ /edu/ {
          #要代理去哪个服务器的ip以及端口
          proxy_pass http://ip:8081;
          #被代理服务器返回默认的响应头中的location头域以及refresh头域数值
          proxy_redirect default;
       }

       location ~ /vod/ {
          #要代理去哪个服务器的ip以及端口
          proxy_pass http://ip:8082;
          #被代理服务器返回默认的响应头中的location头域以及refresh头域数值
          proxy_redirect default;
       }
}

重启nginx,访问,发现成功。

ps 这个8001是我写错了,看效果就行

 

 

可以为您提供一个简单的示例来配置Nginx作为反向代理。在Docker使用Nginx作为反向代理,您可以按照以下步骤进行操作: 1. 创建一个名为 `nginx-proxy` 的网络,以便您的容器可以相互通信: ``` docker network create nginx-proxy ``` 2. 运行您要代理的应用程序容器,并将其连接到 `nginx-proxy` 网络。假设您的应用程序正在运行并监听在端口 `8000` 上: ``` docker run -d --name app --network nginx-proxy YOUR_APP_IMAGE ``` 3. 创建一个 Nginx 配置文件 `default.conf`,并将其挂载到 Nginx 容器中的 `/etc/nginx/conf.d/` 目录中。以下是一个示例配置文件,将所有来自 `/` 路径的请求代理到应用程序容器的 `8000` 端口上: ```nginx server { listen 80; server_name localhost; location / { proxy_pass http://app:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ``` 4. 运行 Nginx 容器,并将其连接到 `nginx-proxy` 网络,并挂载配置文件: ``` docker run -d --name nginx --network nginx-proxy -p 80:80 -v /path/to/default.conf:/etc/nginx/conf.d/default.conf nginx ``` 现在,Nginx 容器将接收来自主机的请求并将其代理到应用程序容器上。您可以根据需要自定义更多的代理规则。请确保将示例中的 `YOUR_APP_IMAGE` 替换为实际的应用程序镜像名称,并将 `/path/to/default.conf` 替换为您的 `default.conf` 配置文件的路径。 希望这可以帮助到您配置 Docker 中的 Nginx 反向代理!如有任何问题,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九洲带鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值