Docker nginx部署多个web静态资源,且隐藏端口
背景:
将多个静态资源部署在docker上,希望能直接使用域名访问,而非域名+端口号
具体思路:
先使用docker创建3个nginx容器
1、web1网站部署的nginx 端口81
2、web2网站部署的nginx 端口82
3、proxy_nginx 用于代理转发的nginx 端口80
说明:
1、统一使用proxy_nginx容器来做入口的代理和转发,这种方法,笔者认为比较理想且优质。需要注意的是,proxy_nginx的端口,必须是80,因为你浏览器访问域名,默认不写端口,就是80端口。
提前准备:
1、先到云服务器解析域名,以及在安全组重开放以上使用到的80/82端口。
2、本文使用到的演示域名为xxx1.com,xxx2.com(请自行替换成自己的实际域名)
具体步骤:
一、拉取镜像
docker pull nginx
拉取成功后执行 docker images
即可看nginx 镜像
二、使用docker创建容器,并且映射(挂载)配置文件等
- 先新建一个nginx容器,只是为了拷贝其中的配置文件,供后续映射的时候使用 (在nginx.conf中) 。
注: 也可以自己手写映射文件中的内容。或者等创建好容器后直接进入容器中拷贝对应的配置文件也可以。
docker run nginx
- 新建一个目录管理web1项目,比如笔者这里是
/home/web1/
,并在/home/web1/
目录下创建conf,www,logs目录
mkdir conf # 用于管理nginx.conf
mkdir www # 用于管理静态资源
mkdir logs # 用于管理日志
- 拷贝事先创建的nginx容器中的配置文件到/home/web1/conf下
# 查找container的ID
docker ps -a# 拷贝事先创建的nginx容器中的配置文件到自己的管理目录下
# xxx为上述创建的nginx容器的ID
docker cp xxx:/etc/nginx/nginx.conf /home/web1/conf/
拷贝完成之后,上述新建的nginx使命完成,直接删除即可
# xxx为上述创建的nginx容器的ID
docker rm xxx
- 上传静态网站到/home/web1/www下面(这个目录就是存放网页的)
# -C选项可以启用SSH远程压缩功能,传输速度更快
scp -P 服务器端口号 -C /静态资源路径/ 用户名@主机ip:/home/web1/www/
- 创建nginx容器
注:以下命令为一行,笔者为了方便注释才做了换行
docker run
--privileged #使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。
-it #-t让docker分配一个伪终端并绑定到容器的标准输入上, -i则让容器的标准输入保持打开
-d #保证容器在后台运行
-p 81:80 #映射本机端口81到容器端口80
--name web1 #container的名字web1
-v /home/web1/www:/usr/share/nginx/html #映射网页存放目录
-v /home/web1/conf/nginx.conf:/etc/nginx/nginx.conf #映射配置文件
-v /home/web1/logs:/var/log/nginx #映射log文件目录
nginx #镜像
注:这里本机的ip是81,容器内是80(多个容器内的80端口是不会相互冲突影响的,因为docker的容器就是隔离的),外界访问是通过81。
- 修改
/home/web1/conf/nginx.conf
的配置( 在其http节点下添加 server ),即可修改容器里面的nginx.conf
配置(因为做了映射)。
vim /home/web1/conf/nginx.conf# 注:本机中的/home/web1/conf/nginx.conf已经映射到实际容器内,实际应以容器为准
server {listen 80; #监听的容器内的端口# server_name xxx.com; #做好映射的域名server_name 120.xx.xx.xx; #或者本机的IPlocation / {root /usr/share/nginx/html; #静态资源在实际容器中的路径index index.htm index.html;}
}
- 按esc,:wq 保存成功,重启web1容器就可以了
注:此处直接重启web1容器也可以,不过此用法的弊端是,如果配置有报错,则不能显示
#方法一
docker restart web1#方法二
docker exec -it web1 nginx -t
docker exec -it web1 nginx -s reload
这样就成功了,访问http://120.xx.xx.xx:81
或 http://xxx.com:81
就能访问网站了;
- 参考如上步骤,新建容器web2:
docker run --privileged -it -d -p 82:80 --name web2 -v /home/web2/www:/usr/share/nginx/html -v /home/web2/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/web2/logs:/var/log/nginx nginx
9. 新建容器proxy_nginx用于代理转,且配置代理文件
注意:proxy_nginx容器使用本机的80端口,用于代理转发静态资源web1,web2
docker run --privileged -it -d -p 80:80 --name proxy_nginx -v /home/proxy_nginx/www:/usr/share/nginx/html -v /home/proxy_nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/proxy_nginx/logs:/var/log/nginx nginx
配置代理文件/home/proxy_nginx/conf/nginx.conf
#直接贴代码
user nginx;
worker_processes auto;error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;events {worker_connections 1024;
}http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;sendfile on;#tcp_nopush on;keepalive_timeout 65;#gzip on;include /etc/nginx/conf.d/*.conf;# web1server {listen 80; #本机的80端口server_name xxx1.com;location / {proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://120.xx.xx.xx:81/;}}# web2server {listen 80; #本机的80端口server_name xxx2.com;location / {proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://120.xx.xx.xx:82/;}}
}
- 把 xxx1.com 转发到http://120.xx.xx.xx:81(web1);
- 把 xxx2.com转发到http://120.xx.xx.xx:82(web2);
- 修改了之后,docker restart proxy_nginx;
- 直接在浏览器中访问xxx1.com,xxx2.com就可以咯
~end
Docker nginx部署多个web静态资源,且隐藏端口相关推荐
- win10 nginx部署前端项目(静态资源服务器和HTML)
win10 nginx部署前端项目(静态资源服务器和HTML) niginx的安装和启停操作参照博客:https://blog.csdn.net/qq_26666947/article/details ...
- 【Vue】Docker + Nginx 部署 Vue3.0 项目
Docker + Nginx 部署 Vue3.0 项目 1.用指令 npm run build 打包vue.js项目(该项目是在WebStorm里面新建的Vue空项目). 打包成功后,会生成一个目录d ...
- Docker+Nginx部署Angular国际化i18n
Docker+Nginx部署Angular国际化i18n 在Angular项目中添加default.conf文件 default.conf 为了支持局域网,增加一个域名,即本地的局域网ip地址. se ...
- Docker+Nginx部署Angular
Docker+Nginx部署Angular 在部署Angular生产环境之前,需要电脑已经安装docker. 添加Dockerfile 在已经完成的Angular项目的项目根目录下添加Dockerfi ...
- springboot 请求路径有后缀_SpringBoot中配置Web静态资源路径的方法
介绍: 本文章主要针对web项目中的两个问题进行详细解析介绍:1- 页面跳转404,即controller转发无法跳转页面问题:2- 静态资源文件路径问题. 项目工具: Intelij Idea, J ...
- docker nginx部署web应用_docker部署Nginx
1.拉取Nginx进行 docker pull nginx:latest拉取完成查看:docker images 2.准备工作 先在主机创建工作文件夹,为了挂载配置和静态文件的访问使用 #启动一个容器 ...
- nginx 配置静态资源缓存。解决web静态资源访问过慢
Nginx文件结构 1.全局块:配置影响nginx全局的指令.一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等. ...
- docker nginx部署前端项目
最近一直在搞前后端分类,一直在想前端的html页面应该用什么部署 想来想去,如果用tomcat好像有点浪费资源,作为程序员自然要时时刻刻追求新的东西 一直以来都是在apache tomcat上面运行, ...
- 尝试 Docker + Nginx 部署单页应用
开发到部署,亲力亲为 当我们开发一个单页面应用时,执行完构建后 npm run build 会生成一个 index.html 在 dist 目录,那怎么把这个 index.html 部署到服务器上呢? ...
最新文章
- vmrun 批量创建vmware虚拟机
- android单个页面切换_MTransition是一个Android上的页面切换动画库
- c语言课程设计怎么做,C语言课程设计————写下流程图! 谢谢
- Linux-pidstat Monitor and Find Statistics for Linux Procesess
- Oracle学习:表的创建、修改、重命名、删除、闪回
- nokia x7 android 9.0,诺基亚X7升级Android 9.0系统
- php文件缓存代码,php文件缓存实例代码
- 什么是交互设计?交互设计是用来干什么的?
- c++ 获取当前时间_ThinkPHP6中获取参数的3种常用方法【总结】
- 51单片机汇编语言例子,涵盖数码管显示,流水灯,串口,外拓,电子钟,频率计,DA、AD转换等实例
- python爬虫论文总结与展望怎么写_论文总结与展望怎么写?
- 马氏距离(Mahalanobis Distance)与欧式距离
- OpenJudge 7624 山区建小学
- 织梦DEDECMS QQ一键登录插件返回空白解决方法
- 银河麒麟V10忘记密码
- android 中存储文件所在位置
- 把计算机器显示桌面,怎样将电脑显示器和桌面匹配
- mysql国内研究现状_Php+Mysql技术的研究现状和发展趋势
- php 分隔视频,视频画面分割器怎么将视频画面分割成三部分?怎么分割视频画面并凸显部分?...
- python全栈开发学习03