文章目录
- 环境准备-安装git
- 生成免费的 SSL 证书-Let's Encrypt
- 为 nginx 容器配置 SSL 证书
- 运行效果
- http 和 https 的统一处理
- 参考链接
https 增加了网络访问的安全性,本文介绍一下使用免费的工具生成 SSL 证书,以及在 nginx 上进行配置的基本方法
环境准备-安装git
在 linux 环境下,首先需要安装 git
#安装 git
yum –y install git
#设置裸仓库,learngit.git 是自定义的名字
cd /你喜欢的文件路径
mkdir git
cd git
git init --bare learngit.git
#创建git用户名赋予密码
useradd git
passwd git
#赋予git用户权限
chown -R git:git learngit.git
#禁用git用户shell登录(一定要禁用)
vi /etc/passwd
#一般在最后一行
git:x:1000:1000::/home/git:/usr/bin/git-shell
生成免费的 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证-通过网页
你可直接从网页来操作 https://www.sslforfree.com/,但这不是本文要介绍的,所以你也可以忽略。
- 获得SSL 证书
通过一些命令,我们可以为我们的域名生成 SSL 证书,需要提前准备好 域名、邮箱(这个证书只有90天的有效时间,到期会邮件通知你,貌似有自动更新证书的方法),关闭你服务器上 80 端口的服务,否则无法获得你想要的 SSL 证书哦。
#找到你安装 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 证书
需要对 (六) Docker 修改容器的内容—— 容器 nginx 反向代理宿主机 tomcat中讲到的 default.conf 进行修改(希望你还记得,这是 nginx 的配置文件)。
我们先简化处理
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;
}
然后启动一个 nginx 容器,注意需要增加 SSL 文件的路径
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 也可以去掉。
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
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只能写一个
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;
}