Docke部署nginx并配置SSL证书

生成免费的 SSL 证书-Let’s Encrypt

Let’s Encrypt is a free, automated, and open certificate authority (CA), run for the public’s benefit.(Let’s Encrypt 是一个免费的、自动化的、开放的证书颁发机构(CA),为公众的利益而运作。)
官网地址:https://letsencrypt.org/

获得SSL 证书

通过一些命令,我们可以为我们的域名生成 SSL 证书,需要提前准备好 域名、邮箱(这个证书只有90天的有效时间,到期会邮件通知你,貌似有自动更新证书的方法),关闭你服务器上 80 端口的服务,否则无法获得你想要的 SSL 证书哦。

1
2
3
4
5
6
7
8
9
#找到你安装 git 仓库的文件夹啊
git clone https://github.com/certbot/certbot

#打开 certbot
cd certbot

#最关键的一步
./certbot-auto certonly --standalone --email
你的邮箱 -d www.域名1.com -d www.域名2.com

这样之后你就可以在目录 /etc/letsencrypt 下看到证书了。
真正重要的两个文件:
/etc/letsencrypt/live/www.域名1.cn/fullchain.pem
/etc/letsencrypt/live/www.域名1.cn/privkey.pem

为 nginx 容器配置 SSL 证书

然后启动一个 nginx 容器,注意需要增加 SSL 文件的路径

1
2
3
4
5
docker run -p 80:80 -p 443:443 --name nginxlog \
-v /usr/java/docker/nginxlog/log/:/var/log/nginx:rw \
-v /usr/java/docker/nginxlog/conf.d/:/etc/nginx/conf.d:rw \
-v /etc/letsencrypt:/etc/letsencrypt:rw \
-d nginx

这里 80 和 https 是可以同时访问的,如果你想屏蔽掉 http 的80 ,可以使用下面的写法,即 ssl on,然后在启动容器的时候 -p 80:80 也可以去掉。

1
2
3
4
5
6
7
server{
#listen 80;
listen 443;
ssl on;
ssl_certificate /etc/letsencrypt/live/www.域名1.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.域名1.cn/privkey.pem;
}

http 和 https 的统一处理
在上面的配置中,80 端口是无法访问的,那么这个时候我们就有两种处理方式,一种是同时保留 http 和 https 的访问,一种是 http 的访问自动转到 https 的访问

同时保留 http 和 https

1
2
3
4
5
6
server{
listen 80;
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/www.域名1.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.域名1.cn/privkey.pem;
}

http 自动跳转 https
对于 80 的访问自动转为 https ,server_name只能写一个

1
2
3
4
5
6
7
8
9
10
11
12
server {
listen 80;
server_name www.域名1.cn;
return 301 https://$server_name$request_uri;
}

server{
listen 443;
ssl on;
ssl_certificate /etc/letsencrypt/live/www.域名1.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.域名1.cn/privkey.pem;
}
坚持技术分享,您的支持将鼓励我继续创作!