docker nginx使用acme.sh为网站免费添加https
acme.sh和certbot一样,都是为站点获取、自动更新免费Let'sEncrypt证书的工具,
只是和certbot相比,acme.sh更加小巧轻便,
基于这一点,用它在DockerNginx容器中部署站点的https证书再合适不过了。
当然,下面的步骤一样适用非Docker环境的Nginx。
1安装
首先,进入alpine容器:
$dockerexec-it<container_name>/bin/sh
(接下来都是在alpine容器中完成)
改用中科大源,官方源实在有些慢(可选步骤):
sed-i's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g'/etc/apk/repositories apkupdate
用curl下载安装acme.sh,并开启自动更新
apkadd--no-cachecurlopensslsocat curlhttps://get.acme.sh|sh ~/.acme.sh/acme.sh--upgrade--auto-upgrade
这里有必要啰嗦一下:
因为alpine默认有wget没有curl,所以曾经试过用wget安装acme.sh,
但是遇到的坑比较大,wget1.25.1以前不支持header属性,在安装和更新acme.sh的时候,会提示错误:
wget:unrecognizedoption`--user-agent=' ... [WedMar105:19:33CET2017]Pleaserefertohttps://www.gnu.org/software/wget/manual/html_node/Exit-Status.htmlforerrorcode:1 [WedMar105:19:34CET2017]Downloaderror.但是在1.27.1版本上就没有问题,如果坚持用wget安装,要更新wget也是一堆事情,还不如直接安装curl来得方便。
2生成证书
这里我们要生成awaimai.com和www.awaimai.com两个域名证书,所以首先确保这两个域名可以访问。
然后用下面的命令生成证书,生成后证书会在:~/.acme.sh目录下:
~/.acme.sh/acme.sh--issue-dawaimai.com-dwww.awaimai.com--nginx
安装证书到Nginx配置目录:
~/.acme.sh/acme.sh--installcert-dawaimai.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-sreload"
值得注意的是,这里指定的所有参数都会被自动记录下来,并在将来证书自动更新以后,被再次自动调用。
3配置nginx
需要编辑的配置如下:
server{ listen80; server_namewww.awaimai.comawaimai.com; rewrite^(.*)https://www.awaimai.com$1permanent; } server{ listen443ssl; sslon; server_namewww.awaimai.com; root/var/www/html/awaimai; indexindex.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-sreload
就OK了。