使用Docker实现Nginx反向代理
作者:九洲带鱼
本机是在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是我写错了,看效果就行
到此这篇关于使用Docker实现Nginx反向代理的文章就介绍到这了,更多相关Docker Nginx反向代理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!