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

简介: 在个人的小项目或者测试环境中,配置反向代理显得十分繁琐,而借助 Nginx-proxy 的镜像,即使是小白,也能快速实现域名转发。1.域名、IP自动转发在开始之前,首先黑进了自家的路由器,将某个域名(甚至不存在),如 dotnet1.nginx-test.com 和 dotnet2.nginx-test.com 指向了局域网内 IP 为 "192.168.9.10" 的机器上(hosts、iptable等方式)。

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

1.域名、IP自动转发

在开始之前,首先黑进了自家的路由器,将某个域名(甚至不存在),如 dotnet1.nginx-test.com 和 dotnet2.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 就能启动对应的应用,实现自动转发。


 

2.零停机重载域名、IP

在上一节中,我们已经是在后台启动了 nginx-proxy 和 dotnet1 的应用,如果我们在新增或者修改原有的域名呢?假设在原有的 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 为应用的名称

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_CONTAINER=nginx-gen

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

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

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


 

4.结语

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

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



本文采用 知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议
转载请注明来源: 张蘅水
我在开发者头条中还会每日分享不错的技术文章,搜索 356194 即可查看
目录
相关文章
|
存储 安全 应用服务中间件
将下载的Nginx证书转换为Tomcat证书格式
好,可以看到,将Nginx证书转换为Tomcat证书的过程就像在烘焙一块蛋糕。你需要准备材料(证书),配备工具(OpenSSL, keytool),按照一定的步骤慎重制作,最后你就拥有了一块可以在浏览器中呈现出漂亮的安全状态的HTTPS蛋糕。就这么简单,明了,没有任何复杂的理论知识,就像在家庭厨房里烘焙的快乐一样。
622 16
|
数据建模 网络安全
阿里云SSL证书不同类型DV、OV和EV如何收费?单域名和通配符SSL价格整理
阿里云SSL证书提供免费和收费版本,涵盖DV、OV、EV多种类型。收费证书品牌包括DigiCert、GlobalSign等,价格从238元/年起。免费SSL证书由Digicert提供,单域名有效3个月,每个实名主体每年可领取20个。具体价格和详情见阿里云SSL官方页面。
|
网络协议
【Azure App Service】App Service 如何配置私网域名以及证书呢?
本文解答了关于 Azure App Service 如何配置私网域名及证书的问题。App Service 不支持私网域名,自定义域名需配置在公共 DNS 服务器上。文章引用官方文档详细说明了映射自定义 DNS 的步骤,并附带参考资料链接,帮助用户深入了解相关配置方法。
505 6
|
缓存 负载均衡 应用服务中间件
Nginx七层(应用层)反向代理:HTTP反向代理proxy_pass篇
通过使用Nginx的反向代理功能,可以有效地提高Web应用的性能、安全性和可扩展性。配置过程中需要注意不同场景下的具体需求,如负载均衡、SSL终止和缓存策略等。正确配置和优化Nginx反向代理可以显著提升系统的整体表现。
2636 20
|
数据建模 网络安全
阿里云SSL证书不同类型DV、OV和EV如何收费?单域名和通配符SSL价格整理
阿里云SSL证书提供免费和收费选项。收费证书包括:DV单域名WoSign 238元/年,DigiCert通配符DV 1500元/年,GlobalSign OV企业型1864元/年等。免费SSL证书由Digicert提供,有效期3个月,每年可领取20个单域名证书。更多详情及价格表请参考阿里云官方页面。
|
安全 网络安全
单域名SSL证书跟通配符SSL证书对比
单域名SSL证书仅保护一个特定域名,如`www.example.com`,适合小型网站,价格较低且配置简单。通配符SSL证书可保护主域名及其所有子域名,如`*.example.com`,适合中大型企业,灵活性高但价格较高。选择时需根据实际需求权衡域名数量、预算和管理复杂度。
1446 5
|
网络协议 应用服务中间件 网络安全
免费泛域名https证书教程—无限免费续签
随着互联网安全意识提升,越来越多网站采用HTTPS协议。本文介绍如何通过JoySSL轻松获取并实现免费泛域名SSL证书的无限续签。JoySSL提供永久免费通配符SSL证书,支持无限制域名申请及自动续签,全中文界面适合国内用户。教程涵盖注册账号、选择证书类型、验证域名所有权、下载与安装证书以及设置自动续签等步骤,帮助网站简化SSL证书管理流程,确保长期安全性。
1935 20
|
域名解析 安全 数据建模
没有域名只有IP地址怎么申请https证书?
IP 地址 SSL 证书是一种特殊的 SSL/TLS 证书,允许直接为 IP 地址配置 HTTPS 加密,适用于内部服务、私有网络和无域名的设备管理。与基于域名的证书不同,申请过程较为复杂,需选择支持 IP 的证书颁发机构(CA),并完成额外的身份验证步骤。浏览器对 IP 地址的支持有限,可能会显示警告。通过正确配置服务器(如 Nginx 或 Apache),可以确保通信安全。
2359 12
|
存储 应用服务中间件 Linux
nginx配置证书和私钥进行SSL通信验证
nginx配置证书和私钥进行SSL通信验证
1211 4
|
缓存 Java 应用服务中间件
nginx的正向代理和反向代理以及tomcat
Nginx的正向代理和反向代理功能在不同的场景中具有重要作用,正向代理主要用于客户端访问控制和匿名浏览,而反向代理则用于负载均衡和高可用性服务。Tomcat作为Java Web应用服务器,与Nginx结合使用,可以显著提升Web应用的性能和稳定性。通过合理配置Nginx和Tomcat,可以构建高效、稳定和可扩展的Web服务架构。
722 11