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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 在个人的小项目或者测试环境中,配置反向代理显得十分繁琐,而借助 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 即可查看
目录
相关文章
|
2月前
|
安全 算法 网络协议
解析:HTTPS通过SSL/TLS证书加密的原理与逻辑
HTTPS通过SSL/TLS证书加密,结合对称与非对称加密及数字证书验证实现安全通信。首先,服务器发送含公钥的数字证书,客户端验证其合法性后生成随机数并用公钥加密发送给服务器,双方据此生成相同的对称密钥。后续通信使用对称加密确保高效性和安全性。同时,数字证书验证服务器身份,防止中间人攻击;哈希算法和数字签名确保数据完整性,防止篡改。整个流程保障了身份认证、数据加密和完整性保护。
|
1月前
|
算法 应用服务中间件 网络安全
阿里云WoSign“国密RSA双SSL证书”应用实践
阿里云WoSign品牌SSL证书是阿里云平台热销的国产品牌证书之一,支持签发国密合规的SM2算法SSL证书以及全球信任的RSA算法SSL证书,能够满足平台用户不同的SSL证书应用需求,同时为用户提供国密模块支持,实现“国密/RSA双证书部署”。
425 6
阿里云WoSign“国密RSA双SSL证书”应用实践
|
1月前
|
算法 安全 应用服务中间件
2025阿里云智惠采购季,WoSign SSL国产证书折上折满减优惠
**2025阿里云“智慧采购季,就上阿里云”活动火热进行中!** 3月1日至31日,阿里云WoSign品牌SSL证书新老用户同享折上折满减优惠。DV SSL证书低至220元/年起,轻松实现HTTPS加密,保障数据传输安全。领取“智惠采购季上云礼包”,先领券再下单,享受满减优惠。WoSign品牌SSL证书国密RSA双算法支持,确保广泛兼容与可靠部署。
732 2
2025阿里云智惠采购季,WoSign SSL国产证书折上折满减优惠
|
1月前
|
运维 安全 网络安全
【运维实战分享】轻松搞定 SSL 证书管理,告别证书繁琐操作
Spug证书平台的最大亮点之一就是其极为简化的证书申请流程,无论是新手还是经验丰富的运维专家,都可以在几分钟内轻松完成证书的申请,通过微信扫码直接登录申请,无需复杂注册,整个过程既方便又快捷。
99 17
|
1月前
|
运维 安全 数据建模
阿里云数字证书管理服务免费版和收费版SSL证书区别、收费标准、申请及部署教程参考
阿里云数字证书管理服务提供多种SSL证书类型和品牌,适用于不同规模的网站,包括但不限于电商、小型企业、大型企业或个人等。阿里云SSL证书有收费版的也有免费版的,有的新手用户由于是初次在阿里云申请SSL证书,可能不是很清楚免费版证书的申请和部署流程,本文为以图文形式为大家展示阿里云免费版SSL证书最新的申请及部署教程,以供参考。
|
1月前
|
算法 数据建模 应用服务中间件
阿里云2025智惠采购季,WoSign SSL证书优惠叠加使用攻略
阿里云2025智惠采购季,WoSign SSL证书折上折满减优惠!活动月期间(2025年03月01日至03月31日)活动折扣叠加满减优惠券,具体如何操作才能获取组合优惠价格呢?快来get优惠券组合使用攻略吧!
467 4
|
3月前
|
数据建模 网络安全
阿里云SSL证书不同类型DV、OV和EV如何收费?单域名和通配符SSL价格整理
阿里云SSL证书提供免费和收费版本,涵盖DV、OV、EV多种类型。收费证书品牌包括DigiCert、GlobalSign等,价格从238元/年起。免费SSL证书由Digicert提供,单域名有效3个月,每个实名主体每年可领取20个。具体价格和详情见阿里云SSL官方页面。
|
2月前
|
云安全 运维 安全
阿里云免费版SSL证书申请及部署图文教程指导
SSL证书是个人和企业搭建网站不可或缺的云安全产品,SSL证书能够为网站和移动应用(APP)及小程序提供数据HTTPS加密协议访问,保障数据的安全。阿里云SSL证书有收费版的也有免费版的,有的新手用户由于是初次在阿里云申请SSL证书,可能不是很清楚免费版证书的申请和部署流程,本文为以图文形式为大家展示阿里云免费版SSL证书最新的申请及部署教程,以供参考。
|
1月前
|
数据建模 网络安全
阿里云申请SSL证书价格多少钱一年?2025免费版和付费版收费标准
阿里云SSL证书提供免费和付费版本,适合不同需求。付费证书品牌涵盖WoSign、DigiCert、GlobalSign等,类型包括DV(域名验证)、OV(企业验证)和EV(扩展验证),价格从238元/年起,通配符和多域名证书价格更高。新用户享5折起优惠,全系列75折起。免费版由Digicert提供,仅支持单域名,有效期3个月,特殊域名可能无法申请。建议正式环境选用付费证书以确保稳定性与安全性。详情及申请流程可参考阿里云官方文档或控制台操作指引。
622 0
|
2月前
|
安全 搜索推荐 网络安全
免费SSL证书:一键加密,守护网站安全
在互联网时代,网站安全至关重要。SSL证书是保护网站数据传输安全的核心工具,提供数据加密、提升信任度、提高搜索引擎排名及避免“不安全”警告等多重优势。现在,您可以通过JoySSL官网免费获取SSL证书,只需注册并填写注策码(230907),即可一键加密,轻松守护网站安全,提升用户体验和品牌形象。立即行动,为您的网站穿上“安全防护衣”!
71 11