在个人的小项目或者测试环境中,配置反向代理显得十分繁琐,而借助 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-
container_name: simple
environment:
- VIRTUAL_PORT=
- 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: ''
services:
nginx:
restart: always
image: nginx
container_name: nginx
ports:
- :
- :
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= #监听的端口
- 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

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

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

  1. 利用nginx 来实现内网yum源(反向代理)

    简介 在项目部署时,尤其是在政府企业,对于外网简直是奢望,但是对于运维来说,没有外网的话只能自建yum源.我今天来说的是一种简单的自建yum源方法,前提是必须有一台内外网都有的机器,我们一般称为前置机 ...

  2. 复制docker容器中的nginx某个文件到linux中

    前提:docker容器中的nginx要开启

  3. 生产环境中nginx既做web服务又做反向代理

    一.写对于初入博客园的感想 众所周知,nginx是一个高性能的HTTP和反向代理服务器,在以前工作中要么实现http要么做反向代理或者负载均衡.尚未在同一台nginx或者集群上同时既实现HTTP又实现 ...

  4. nginx在使用非80端口做反向代理【转】

    设置nginx反向代理,nginx在使用非80端口做反向代理时,浏览器访问发现返回302错误 upstream jboss{ server max_fails= fail_timeout=20s; s ...

  5. nginx 反向代理及 https 证书配置

    nginx 反向代理及 https 证书配置 author: yunqimg(ccxtcxx0) 1. 编译安装nginx 从官网下载 nginx源码, 并编译安装. ./configure --pr ...

  6. LNMP安装Let’s Encrypt 免费SSL证书方法:自动安装与手动配置Nginx

    前几天介绍了最新StartSSL免费SSL申请与配置,很多人看到部落介绍SSL证书安装时总是推荐了OneinStack,因为OneinStack提供了一键添加和配置Let's Encrypt 免费SS ...

  7. 使用Let’s Encrypt创建nginx免费SSL证书

    资料参考: https://www.freehao123.com/top-8-free-ssl-cert/   八大免费SSL证书-给你的网站免费添加Https安全加密 https://www.fre ...

  8. StartCom免费ssl证书申请以及在Tomcat环境中的配置

    提示:建议以下操作不使用谷歌浏览器(该网站的证书不识别...),可以看到我的截图中谷歌换成了ie(没装火狐)...建议该申请使用火狐 前面介绍了下自签名的ssl证书,虽然可以实现https协议访问,但 ...

  9. Nginx多域名多Server反向代理配置

    Nginx强大的正则表达式支持,可以使server_name的配置变得很灵活,如果你要做多用户博客,那么每个用户拥有自己的二级域名也就很容易实现了.下面我就来说说server_name的使用吧:ser ...

随机推荐

  1. jdk1.8新特性,还不知道的朋友还不看看,1.9都快出来了

    一.接口的默认方法 Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法,示例如下:代码如下:interface Formula {     ...

  2. 易汇金在线支付接口实例。ecshop和shopex,shopnc,iwebshop下完美无错(最新)

    最近为客户的一个在线商城做了一个易汇金在线支付的接口.跟大家分享一下. 1 首先可以模仿其他的接口,比如支付宝,财付通等的接口,构建模块功能文件和语言文件. 功能模块构建: /includes/mod ...

  3. ios sqlite3的简单使用

    第一:创建表格 //创建表格 -(void)creatTab{ NSString*creatSQL=@"CREATE TABLE IF NOT EXISTS PERSIONFO(ID INT ...

  4. 【mysql】关于InnoDB表text blob大字段的优化

    最近在数据库优化的时候,看到一些表在设计上使用了text或者blob的字段,单表的存储空间已经达到了近100G,这种情况再去改变和优化就非常难了 一.简介 为了清楚大字段对性能的影响,我们必须要知道i ...

  5. 学习MVC之租房网站(四)-实现Service层并进行单元测试

    在上一篇<学习MVC之租房网站(三)-编写Eneity类并创建数据库>中,记录了编写Eneity类并采用CodeFirst的方式创建数据库的过程,接下来就到了Service层的实现了,并且 ...

  6. 初探CSRF在ASP.NET Core中的处理方式

    前言 前几天,有个朋友问我关于AntiForgeryToken问题,由于对这一块的理解也并不深入,所以就去研究了一番,梳理了一下. 在梳理之前,还需要简单了解一下背景知识. AntiForgeryTo ...

  7. mvc中DotNetOpenAuth实现了第三方应用访问自己的网站

    以yahoo为例吧,即从yahoo取得用户信息,存到自己的站点,实现了用户信息在一次录入多处共享的功能.以下是在点击了使用yahoo登录本站的链接后执行action:OpenId. ProviderU ...

  8. struts1实现简单的登录功能(附源码)

    环境:MyEclipse 14                                                                                     ...

  9. Java--定时器问题

    定时器问题 定时器属于基本的基础组件,不管是用户空间的程序开发,还是内核空间的程序开发,很多时候都需要有定时器作为基础组件的支持.一个定时器的实现需要具备以下四种基本行为:添加定时器.取消定时器.定时 ...

  10. C语言学习第七章

    今天开始学习指针,指针在C语言中具有很重要的地位,按照老师所说,学C学不好指针跟没学一样,可见指针在C语言中的重要地位.废话不多说,首先我们先要知道什么是指针. 指针:指针是一个变量,它存储另一个对象 ...