docker nginx使用acme.sh为网站免费添加https
本文向大家介绍docker nginx使用acme.sh为网站免费添加https,包括了docker nginx使用acme.sh为网站免费添加https的使用技巧和注意事项,需要的朋友参考一下
acme.sh和certbot一样,都是为站点获取、自动更新免费Let's Encrypt证书的工具,
只是和 certbot 相比,acme.sh更加小巧轻便,
基于这一点,用它在Docker Nginx容器中部署站点的https证书再合适不过了。
当然,下面的步骤一样适用非Docker环境的Nginx。
1 安装
首先,进入alpine容器:
$ docker exec -it <container_name> /bin/sh
(接下来都是在alpine容器中完成)
改用中科大源,官方源实在有些慢(可选步骤):
sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories apk update
用curl下载安装acme.sh,并开启自动更新
apk add --no-cache curl openssl socat curl https://get.acme.sh | sh ~/.acme.sh/acme.sh --upgrade --auto-upgrade
这里有必要啰嗦一下:
因为alpine默认有wget没有curl,所以曾经试过用wget安装acme.sh,
但是遇到的坑比较大,wget 1.25.1以前不支持header属性,在安装和更新acme.sh的时候,会提示错误:
wget: unrecognized option `--user-agent=' ... [Wed Mar 1 05:19:33 CET 2017] Please refer to https://www.gnu.org/software/wget/manual/html_node/Exit-Status.html for error code: 1 [Wed Mar 1 05:19:34 CET 2017] Download error.但是在1.27.1版本上就没有问题,如果坚持用wget安装,要更新wget也是一堆事情,还不如直接安装curl来得方便。
2 生成证书
这里我们要生成awaimai.com和www.awaimai.com两个域名证书,所以首先确保这两个域名可以访问。
然后用下面的命令生成证书,生成后证书会在:~/.acme.sh 目录下:
~/.acme.sh/acme.sh --issue -d awaimai.com -d www.awaimai.com --nginx
安装证书到Nginx配置目录:
~/.acme.sh/acme.sh --installcert -d awaimai.com \ --key-file /etc/nginx/conf.d/ssl/awaimai.com/awaimai.key \ --fullchain-file /etc/nginx/conf.d/ssl/awaimai.com/fullchain.cer \ --reloadcmd "nginx -s reload"
值得注意的是, 这里指定的所有参数都会被自动记录下来, 并在将来证书自动更新以后, 被再次自动调用。
3 配置nginx
需要编辑的配置如下:
server { listen 80; server_name www.awaimai.com awaimai.com; rewrite ^(.*) https://www.awaimai.com$1 permanent; } server { listen 443 ssl; ssl on; server_name www.awaimai.com; root /var/www/html/awaimai; index index.php; ssl_certificate /etc/nginx/conf.d/ssl/awaimai.com/fullchain.cer; ssl_certificate_key /etc/nginx/conf.d/ssl/awaimai.com/awaimai.key; # ... }
第一个server的作用是跳转原来http到https,
第二个server作用是侦听443端口,以及设置http证书等其他所有功能。
重启nginx:
nginx -s reload
就OK了。