在阿里云centos7.4上配置nginx免费的https证书,支持泛解析
一 原理说明:
使用acme.sh工具来生成证书,但为了方面采用的使用dns添加TXT记录验证方式,跟传统的webroot有区别。这种方式更简单,快速。
二 效果如下:
- 根证书域名 https://wallbase.tv
- 泛解析域名 https://www.wallbase.tv
- 图片证明
三 准备工作或者必要条件
- 1 购买阿里云的的ecs服务器,并且在阿里云已经购买域名
- 2 阿里云开通accessKey,该accessKey需要有操作管理dnsapi的权限,注意:acme使用的letsencript为了验证域名是否是你自己拥有,会通过在域名解析记录中添加一条TXT的解析记录来做为验证。
- 3 我所有操作都是/root/.acme.sh目录下执行的
四 实施步骤
-
1 安装nginx
## 安装依赖组件,openssl-devel是必须的,因为nginx要使用ssl指令 # yum install -y gcc gcc-c++ # yum install –y openssl-devel pcre-devel zlib-devel # wget http://nginx.org/download/nginx-1.10.3.tar.gz # tar -zxvf nginx-1.10.3.tar.gz # cd nginx-1.10.3 # ./configure --prefix=/export/nginx-1.10.3 --with-http_stub_status_module --with-http_ssl_module # make && make install
-
2 安装acme证书签发工具
## 参考文档https://github.com/Neilpang/acme.sh # pwd /root # curl https://get.acme.sh | sh
- 3 使用dns_ali生成证书
这里需要把阿里云的accessKey访问设置环境变量中,因为acme在执行过程会去调用阿里云的dnsapi接口,添加TXT的解析记录,在生成证书完毕后,会删除该记录,在解析列表中没有,但是你可以从解析历史记录中查看的历史数据的。
说名:一般不需要写www.wallbase.tv而是使用*.wallbase.tv代替所有的泛解析域名。dns_ali表示使用的阿里云dns,当然acme还支持很多的dns提供商。
# export Ali_Key="LTAItQaq21eiKR66"
# export Ali_Secret="***********"
# ./acme.sh --issue --dns dns_ali -d wallbase.tv -d *.wallbase.tv
## 安装证书文件/root/.acme.sh/ssl/wallbase.tv
# mkdir -p ssl/wallbase.tv
# ./acme.sh --installcert -d wallbase.tv -d *.wallbase.tv --key-file ssl/wallbase.tv/privkey.pem --fullchain-file ssl/lockbur.com/fullchain.pem
官方说明: The Ali_Key and Ali_Secret will be saved in ~/.acme.sh/account.conf and will be reused when needed. 意思就是你第一次执行后,acem会保留的的账号信息。所有你执行完毕,就可以使用如下命令删除环境变量:
# env
# unset Ali_Key
# unset Ali_Secret
执行完上面的步骤之后,会在你的/root/.acme.sh/ssl/wallbase.tv目录生产两个文件privkey.pem和fullchain.pem。没错这就是证书文件了。
五 把证书安装到nginx上去
- 1 第一个 server指令监听的80端口,把所有http的访问重定向到https。
- 2 nginx配置的关键指令 listen 443 ssl;监听443端口。
- 3 指定证书文件的位置。这里证书文件可以泛解析,我二级域名都用同一个证书。
ssl_certificate /root/.acme.sh/ssl/wallbase.tv/fullchain.pem;
ssl_certificate_key /root/.acme.sh/ssl/wallbase.tv/privkey.pem;
- 4 nginx的配置文件如下:
server {
listen 80;
server_name localhost;
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
server_name wallbase.tv www.wallbase.tv alpha.wallbase.tv;
listen 443 ssl;
ssl_certificate /root/.acme.sh/ssl/wallbase.tv/fullchain.pem;
ssl_certificate_key /root/.acme.sh/ssl/wallbase.tv/privkey.pem;
location / {
limit_conn perip 10;
proxy_pass http://localhost:3000;
}
location /api {
limit_conn perip 10;
proxy_pass http://localhost:1062;
}
location ~* \.(eot|ttf|woff|svg)$ {
limit_conn perip 10;
add_header Access-Control-Allow-Origin *;
proxy_pass http://localhost:3000;
}
}
server {
server_name assets.wallbase.tv;
listen 443 ssl;
ssl_certificate /root/.acme.sh/ssl/wallbase.tv/fullchain.pem;
ssl_certificate_key /root/.acme.sh/ssl/wallbase.tv/privkey.pem;
location / {
root html;
}
location ~* \.(eot|ttf|woff|svg)$ {
limit_conn perip 10;
add_header Access-Control-Allow-Origin *;
}
}
- 5 最后还有关键一步,重启nginx
/export/nginx-1.10.3/sbin/nginx -s reload
然后去访问你的页面,看看是不是有点炫酷了。