将多个静态资源部署在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 nginxdocker pull nginxdocker pull nginx
拉取成功后执行 docker images
即可看nginx 镜像
二、使用docker创建容器,并且映射(挂载)配置文件等
注: 也可以自己手写映射文件中的内容。或者等创建好容器后直接进入容器中拷贝对应的配置文件也可以。
docker run nginxdocker run nginxdocker run nginx
<span class="token function">mkdir</span> conf <span class="token function">mkdir</span> www <span class="token function">mkdir</span> logs<span class="token function">mkdir</span> conf <span class="token function">mkdir</span> www <span class="token function">mkdir</span> logsmkdir conf mkdir www mkdir logs
docker <span class="token function">ps</span> -a docker <span class="token function">cp</span> xxx:/etc/nginx/nginx.conf /home/web1/conf/docker <span class="token function">ps</span> -a docker <span class="token function">cp</span> xxx:/etc/nginx/nginx.conf /home/web1/conf/docker ps -a docker cp xxx:/etc/nginx/nginx.conf /home/web1/conf/
拷贝完成之后,上述新建的nginx使命完成,直接删除即可
docker <span class="token function">rm</span> xxxdocker <span class="token function">rm</span> xxxdocker rm xxx
<span class="token function">scp</span> -P 服务器端口号 -C /静态资源路径/ 用户名@主机ip:/home/web1/www/<span class="token function">scp</span> -P 服务器端口号 -C /静态资源路径/ 用户名@主机ip:/home/web1/www/scp -P 服务器端口号 -C /静态资源路径/ 用户名@主机ip:/home/web1/www/
docker run --privileged -it -d -p <span class="token number">81</span>:80 --name 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 nginxdocker run --privileged -it -d -p <span class="token number">81</span>:80 --name 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 nginxdocker run --privileged -it -d -p 81:80 --name 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 nginx
注:这里本机的ip是81,容器内是80(多个容器内的80端口是不会相互冲突影响的,因为docker的容器就是隔离的),外界访问是通过81。
<span class="token function">vim</span> /home/web1/conf/nginx.conf server <span class="token punctuation">{<!-- --></span> listen <span class="token number">80</span><span class="token punctuation">;</span> server_name <span class="token number">120</span>.xx.xx.xx<span class="token punctuation">;</span> location / <span class="token punctuation">{<!-- --></span> root /usr/share/nginx/html<span class="token punctuation">;</span> index index.htm index.html<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token function">vim</span> /home/web1/conf/nginx.conf server <span class="token punctuation">{<!-- --></span> listen <span class="token number">80</span><span class="token punctuation">;</span> server_name <span class="token number">120</span>.xx.xx.xx<span class="token punctuation">;</span> location / <span class="token punctuation">{<!-- --></span> root /usr/share/nginx/html<span class="token punctuation">;</span> index index.htm index.html<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span>vim /home/web1/conf/nginx.conf server { listen 80; server_name 120.xx.xx.xx; location / { root /usr/share/nginx/html; index index.htm index.html; } }
docker restart web1 docker <span class="token builtin class-name">exec</span> -it web1 nginx -t docker <span class="token builtin class-name">exec</span> -it web1 nginx -s reloaddocker restart web1 docker <span class="token builtin class-name">exec</span> -it web1 nginx -t docker <span class="token builtin class-name">exec</span> -it web1 nginx -s reloaddocker 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
就能访问网站了;
docker run --privileged -it -d -p <span class="token number">82</span>: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 nginxdocker run --privileged -it -d -p <span class="token number">82</span>: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 nginxdocker 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 <span class="token number">80</span>: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 nginxdocker run --privileged -it -d -p <span class="token number">80</span>: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 nginxdocker 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<span class="token punctuation">;</span> worker_processes auto<span class="token punctuation">;</span> error_log /var/log/nginx/error.log notice<span class="token punctuation">;</span> pid /var/run/nginx.pid<span class="token punctuation">;</span> events <span class="token punctuation">{<!-- --></span> worker_connections <span class="token number">1024</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> http <span class="token punctuation">{<!-- --></span> include /etc/nginx/mime.types<span class="token punctuation">;</span> default_type application/octet-stream<span class="token punctuation">;</span> log_format main <span class="token string">'<span class="token variable">$remote_addr</span> - <span class="token variable">$remote_user</span> [<span class="token variable">$time_local</span>] "<span class="token variable">$request</span>" '</span> <span class="token string">'<span class="token variable">$status</span> <span class="token variable">$body_bytes_sent</span> "<span class="token variable">$http_referer</span>" '</span> <span class="token string">'"<span class="token variable">$http_user_agent</span>" "<span class="token variable">$http_x_forwarded_for</span>"'</span><span class="token punctuation">;</span> access_log /var/log/nginx/access.log main<span class="token punctuation">;</span> sendfile on<span class="token punctuation">;</span> keepalive_timeout <span class="token number">65</span><span class="token punctuation">;</span> include /etc/nginx/conf.d/*.conf<span class="token punctuation">;</span> server <span class="token punctuation">{<!-- --></span> listen <span class="token number">80</span><span class="token punctuation">;</span> server_name xxx1.com<span class="token punctuation">;</span> location / <span class="token punctuation">{<!-- --></span> proxy_redirect off<span class="token punctuation">;</span> proxy_set_header Host <span class="token variable">$host</span><span class="token punctuation">;</span> proxy_set_header X-Real-IP <span class="token variable">$remote_addr</span><span class="token punctuation">;</span> proxy_set_header X-Forwarded-For <span class="token variable">$proxy_add_x_forwarded_for</span><span class="token punctuation">;</span> proxy_pass http://120.xx.xx.xx:81/<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> server <span class="token punctuation">{<!-- --></span> listen <span class="token number">80</span><span class="token punctuation">;</span> server_name xxx2.com<span class="token punctuation">;</span> location / <span class="token punctuation">{<!-- --></span> proxy_redirect off<span class="token punctuation">;</span> proxy_set_header Host <span class="token variable">$host</span><span class="token punctuation">;</span> proxy_set_header X-Real-IP <span class="token variable">$remote_addr</span><span class="token punctuation">;</span> proxy_set_header X-Forwarded-For <span class="token variable">$proxy_add_x_forwarded_for</span><span class="token punctuation">;</span> proxy_pass http://120.xx.xx.xx:82/<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span>user nginx<span class="token punctuation">;</span> worker_processes auto<span class="token punctuation">;</span> error_log /var/log/nginx/error.log notice<span class="token punctuation">;</span> pid /var/run/nginx.pid<span class="token punctuation">;</span> events <span class="token punctuation">{<!-- --></span> worker_connections <span class="token number">1024</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> http <span class="token punctuation">{<!-- --></span> include /etc/nginx/mime.types<span class="token punctuation">;</span> default_type application/octet-stream<span class="token punctuation">;</span> log_format main <span class="token string">'<span class="token variable">$remote_addr</span> - <span class="token variable">$remote_user</span> [<span class="token variable">$time_local</span>] "<span class="token variable">$request</span>" '</span> <span class="token string">'<span class="token variable">$status</span> <span class="token variable">$body_bytes_sent</span> "<span class="token variable">$http_referer</span>" '</span> <span class="token string">'"<span class="token variable">$http_user_agent</span>" "<span class="token variable">$http_x_forwarded_for</span>"'</span><span class="token punctuation">;</span> access_log /var/log/nginx/access.log main<span class="token punctuation">;</span> sendfile on<span class="token punctuation">;</span> keepalive_timeout <span class="token number">65</span><span class="token punctuation">;</span> include /etc/nginx/conf.d/*.conf<span class="token punctuation">;</span> server <span class="token punctuation">{<!-- --></span> listen <span class="token number">80</span><span class="token punctuation">;</span> server_name xxx1.com<span class="token punctuation">;</span> location / <span class="token punctuation">{<!-- --></span> proxy_redirect off<span class="token punctuation">;</span> proxy_set_header Host <span class="token variable">$host</span><span class="token punctuation">;</span> proxy_set_header X-Real-IP <span class="token variable">$remote_addr</span><span class="token punctuation">;</span> proxy_set_header X-Forwarded-For <span class="token variable">$proxy_add_x_forwarded_for</span><span class="token punctuation">;</span> proxy_pass http://120.xx.xx.xx:81/<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> server <span class="token punctuation">{<!-- --></span> listen <span class="token number">80</span><span class="token punctuation">;</span> server_name xxx2.com<span class="token punctuation">;</span> location / <span class="token punctuation">{<!-- --></span> proxy_redirect off<span class="token punctuation">;</span> proxy_set_header Host <span class="token variable">$host</span><span class="token punctuation">;</span> proxy_set_header X-Real-IP <span class="token variable">$remote_addr</span><span class="token punctuation">;</span> proxy_set_header X-Forwarded-For <span class="token variable">$proxy_add_x_forwarded_for</span><span class="token punctuation">;</span> proxy_pass http://120.xx.xx.xx:82/<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span>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; keepalive_timeout 65; include /etc/nginx/conf.d/*.conf; server { listen 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/; } } server { listen 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
原文链接:https://blog.csdn.net/qq_30669833/article/details/120931562