没有https加持的网站会逐渐地被浏览器标记为不安全的,所以为网站添加https已经变得刻不容缓。对于商业网站来说,花钱购买SSL/TLS证书并不是什么问题。但对于个人用户来说,如果能有免费的SSL/TLS证书可用将会是非常幸福的事情!咱们就加密是一个提供免费SSL/TLS证书的网站,由于其证书期限只有三个月,所以需要我们用自动化的方式去更新证书。本文将介绍如何为通过码头工人运行的nginx中的站点添加https支持,并自动完成证书的更新。本文的演示环境为:运行在Azure上的Ubuntu 16.04主机(此图来自互联网):
在Azure上创建Ubuntu类型的虚机事件非常容易的事情,安装码头工人也无须赘言。比较容易忽略的是配置合适的网络安全组规则,比如打开80和443端口:
还有就是配置DNS:
简单起见,直接使用一个镜像中的nodejs应用作为web站点:
码头工人拉ljfpower/nodedemo美元 码头工人网络创建美元- d webnet桥梁 码头工人美元运行- d——重启=总是暴露=3000 \ ——网络=webnet name=myweb \ ljfpower/nodedemo
在用户的家目录下创建nginx目录及其子目录conf.d,相依。crt和html,创建日志目录及其子目录nginx和letsencrypt:
mkdir - p nginx美元/{conf.d conf.crt, html} mkdir - p日志美元/{nginx, letsencrypt}
说明,本文演示的示例中需要我们手动创建的文件和目录结构如下:
创建nginx/nginx。参看文件,内容如下:
用户nginx; worker_processes汽车; error_log/var/log/nginx/error.日志警告; pid/var/run/nginx.pid; 事件{ worker_connections 2048; } http { 包括/etc/nginx/mime.types; default_type应用程序/八进制; sendfile> 上游网络{ 服务器myweb: 3000; } 服务器{ 听80; 听[:]:80; server_name filterinto.com www.filterinto.com; ^ ~/位置。众所周知/acme-challenge/{ default_type“text/plain”; 根/usr/share/nginx/html; } 位置=/V谒苤?acme-challenge/{ 返回404; } 位置/{ proxy_pass http://web; } }
其中/V谒苤?acme-challenge目录是certbot工具在生成证书时创建的。接下来创建文件nginx/html/索引。html文件,内容如下:
& lt; !DOCTYPE html> & lt; html> & lt; head> & lt;元charset=" utf - 8 "/比; & lt; title>让我们第一次加密证书问题Site & lt;/head> & lt; body> & lt; h2>你好HTTPS ! & lt;/h2> & lt; p> 只是第一次使用SSL证书签发加密的 certbot。 & lt;/p> & lt;/body> & lt;/html>
这个页面也是certbot在生成证书时需要用到的。最后让我们启动容器(在用户的家目录下执行下面的命令):
码头工人美元- d \运行 - p 80:80 \ - v $ (pwd)/nginx/conf.d:/etc/nginx/conf。d: ro \ - v $ (pwd)/nginx/nginx.conf:/etc/nginx/nginx。相依:ro \ - v $ (pwd)/日志/nginx:/var/log/nginx \ - v $ (pwd)/nginx/html:/usr/share/nginx/html \ ——重启=总是\ - - - name=网关\ ——网络=webnet \ nginx: 1.14
注意:这时没有映射443端口,也没有挂载存放证书的目录。只能以http协议访问访问我们的站点:
让我们加密是一个提供免费SSL/TLS证书的网站,它为用户提供了certbot工具用来生成SSL/TLS证书。方便起见,我们把certbot简单的封装到容器中。在用户的家目录下创建certbot目录,进入certbot目录并把下面的内容保存到Dockerfile文件中: