在容器中利用Nginx-proxy实现多域名的自动反向代理、免费SSL证书

栏目: 服务器 · Nginx · 发布时间: 7年前

内容简介:在容器中利用Nginx-proxy实现多域名的自动反向代理、免费SSL证书

在个人的小项目或者测试环境中,配置反向代理显得十分繁琐,而借助 Nginx-proxy 的镜像,即使是小白,也能快速实现域名转发。

1.域名、IP自动转发

在开始之前,首先黑进了自家的路由器,将某个域名(甚至不存在),如 dotnet1.nginx-test.comdotnet2.nginx-test.com 指向了局域网内 IP 为 "192.168.9.10" 的机器上(hosts、iptable等方式)。接着,假设你已经安装了 Docker 的基础上,只需再安装 docker-compose 。如果你对这一切一无了解的话,可以使用daocloud提供的的 一键脚本。回到本文讨论的重点,在不写任何 Nginx 配置的前提下,让相关的域名指向对应的应用。编写如下的 docker-compose.yml:

version: '2' services:   nginx-proxy:     image: jwilder/nginx-proxy     container_name: nginx-proxy     ports:       - "80:80"     volumes:       - /var/run/docker.sock:/tmp/docker.sock:ro    dotnet1:     image: daocloud.io/koukouge/zhs:master     container_name: dotnet1     environment:       - VIRTUAL_PORT=80 #监听的端口       - VIRTUAL_HOST=dotnet1.nginx-test.com,192.168.9.10  #监听的地址

只需要一句 docker-compose up 就能启动对应的应用,实现自动转发。

在容器中利用Nginx-proxy实现多域名的自动反向代理、免费SSL证书

自动反向代理

2.零停机重载域名、IP

在上一节中,我们已经是在后台启动了 nginx-proxydotnet1 的应用,如果我们在新增或者修改原有的域名呢?假设在原有的 docker-compose.yml 增加一个 2048 的镜像:

simple:     image: alexwhen/docker-2048     container_name: simple     environment:       - VIRTUAL_PORT=80       - VIRTUAL_HOST=dotnet2.nginx-test.com

这种情况下,重启整个 docker-compose 显然不是最佳的方式。为了不影响已经运行中的应用,只需对新增或者需要修改的应用执行如下命令:

sudo docker-compose up --build --no-deps -d simple # simple 为应用的名称
在容器中利用Nginx-proxy实现多域名的自动反向代理、免费SSL证书

零停机重载

3. Let's Encrypt 免费证书

随着网络安全意识的提高,Https 逐渐成为互联网的标配。特别是在国内的网络环境中,网络劫持现象愈演愈烈。即使是个人的小博客网站,博主并不接入广告的情况下,仍然可以无意中发现博客中居然有 "澳门在线赌场" 的广告,这时候使用 SSL 证书就显得十分必要了。 Let's Encrypt 是一家致力于推广 Https 技术的 公益组织 ,其免费证书得到了几乎所有浏览器的支持,是目前最为流行、也是最大的免费证书提供者。同样的,在我们之前基础上,我们同样可以实现对多个域名证书的傻瓜化配置。在原有的基础下,我们将第一节中的 docker-compose.yml 修改为:

version: '2' services:   nginx:     restart: always     image: nginx     container_name: nginx     ports:     - 80:80     - 443:443     volumes:     - /etc/nginx/conf.d     - /etc/nginx/vhost.d     - /usr/share/nginx/html     - /etc/nginx/certs:/etc/nginx/certs:ro    dotnet1:     image: daocloud.io/koukouge/zhs:master     container_name: dotnet1     environment:       - VIRTUAL_PORT=80 #监听的端口       - VIRTUAL_HOST=dotnet1.nginx-test.com  #监听的地址       - LETSENCRYPT_HOST=dotnet1.nginx-test.com #证书的域名       - LETSENCRYPT_EMAIL=someone@simple.com #证书所有者的邮箱,快过期时会提醒    nginx-gen:     restart: always     image: jwilder/docker-gen     container_name: nginx-gen     volumes:     - /var/run/docker.sock:/tmp/docker.sock:ro     - /etc/nginx/nginx.tmpl:/etc/docker-gen/templates/nginx.tmpl:ro     volumes_from:     - nginx     entrypoint: /usr/local/bin/docker-gen -notify-sighup nginx -watch -wait 5s:30s       /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf    letsencrypt-nginx-proxy-companion:     restart: always     image: jrcs/letsencrypt-nginx-proxy-companion     container_name: letsencrypt-nginx-proxy-companion     volumes_from:     - nginx     volumes:     - /var/run/docker.sock:/var/run/docker.sock:ro     - /etc/nginx/certs:/etc/nginx/certs:rw     environment:     - NGINX_DOCKER_GEN_Cmock=nginx-gen

先别急着启动,如果已经启动了就会发现 nginx-gen应用 缺失了 nginx.tmpl 文件。所以我们需要将其下载并放置在相应的位置:

curl https://raw.githubusercontent.com/jwilder/nginx-proxy/master/nginx.tmpl > /etc/nginx/nginx.tmpl

最后,只要一声令下,就可以发现网站已经成功多了一个绿色的小锁。

在容器中利用Nginx-proxy实现多域名的自动反向代理、免费SSL证书

某Https网站

4.结语

本文主要是参考 https://github.com/fatk/docker-letsencrypt-nginx-proxy-companion-examples

本文仅仅是针对新手提供的教程,如果你有其他好的想法或者用法,可以在评论区点评。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Dive Into Python 3

Dive Into Python 3

Mark Pilgrim / Apress / 2009-11-6 / USD 44.99

Mark Pilgrim's Dive Into Python 3 is a hands-on guide to Python 3 (the latest version of the Python language) and its differences from Python 2. As in the original book, Dive Into Python, each chapter......一起来看看 《Dive Into Python 3》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

MD5 加密
MD5 加密

MD5 加密工具