docker nginx使用acme.sh为网站免费添加https

2.8k 服务器 , , 发表评论

acme.shcertbot一样,都是为站点获取、自动更新免费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.comwww.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 ^(.*) http://47.128.204.47$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的作用是跳转原来httphttps

第二个server作用是侦听443端口,以及设置http证书等其他所有功能。

重启nginx:

nginx -s reload

就OK了。

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

昵称 *