腾讯云证书现在是3个月过期,自动申请下发证书变成刚需,域名多了免得证书失效了。
参考腾讯云文档 cloud.tencent.com/document/pr…
参考 zhuanlan.zhihu.com/p/670418258
步骤
安装nginx并设置域名解析
-
1、在腾讯云管理台,域名解析新建二级域名A记录指向服务器外网IP,如域名test.my.com
-
2、SSH登录服务器,安装nginx
# 安装nginx
yum install -y nginx
# 开机启动
systemctl enable nginx
# 启动
nginx
# 软连接
mkdir -p /root/nginx && ln -s /etc/nginx/ /root/nginx
- 3、在nginx新建域名配置文件
进入 /etc/nginx/conf.d/
新建文件 test.my.com.conf
cd /etc/nginx/conf.d/
touch test.my.com.conf
将下面内容放入 test.my.com.conf
server {
listen 80;
server_name test.my.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
再重启nginx
nginx -t
nginx -s reload
安装 acme.sh
curl https://get.acme.sh | sh -s email=自己邮箱@qq.com
crontab -l
cd ~/.acme.sh
# 查看已配置域名
sh acme.sh --list
sh acme.sh --set-default-ca --server letsencrypt
注册域名自动申请证书
cd /root/.acme.sh
export Domain="test.my.com"
############################################
###### 1、如果是yum安装的nginx且已经注册nginx服务可以不用知道nginx.conf文件地址,用下面这句
sh acme.sh --issue -d $Domain --nginx
###### 2、如果是nginx编译安装的,需要知道nginx.conf文件地址,用下面这句
sh acme.sh --issue -d $Domain --nginx /usr/local/nginx/conf/nginx.conf
############################################
############################################
# 注意下面的 key 和 crt 目标地址根据自身情况写,我用的yum就是这个地址
# force-reload 这句也是根据自身情况写,我用的yum而且已经注册nginx为服务,不然就用 nginx -s reload
##### 1、如果是 yum 安装的nginx 且已经注册nginx服务
sh acme.sh --install-cert -d $Domain \
--key-file /etc/nginx/conf.d/$Domain.key \
--fullchain-file /etc/nginx/conf.d/${Domain}_bundle.crt \
--reloadcmd "service nginx force-reload"
##### 2、如果是自己编译安装的nginx,如果没有 nginx service 服务
sh acme.sh --install-cert -d $Domain \
--key-file /usr/local/nginx/conf/$Domain.key \
--fullchain-file /usr/local/nginx/conf/${Domain}_bundle.crt \
--reloadcmd "nginx -s reload"
#########################################
报错处理
Cannot find nginx config.
增加上 nginx 配置文件地址
sh acme.sh --issue -d $Domain --nginx /usr/local/nginx/conf/nginx.conf
urn:ietf:params:acme:error:serverInternal
看起来 letsenscypt 报错,等了一分钟,重新执行又成功了
Signing failed. Finalize code was not 200.
{
"type": "urn:ietf:params:acme:error:serverInternal",
"detail": "Error finalizing order",
"status": 500
}
配置nginx的https
进入 /etc/nginx/conf.d/
修改 test.my.com.conf
改为
注意里面都要改成自己的域名
server {
listen 80;
listen 443 ssl;
server_name test.my.com;
ssl_certificate /etc/nginx/conf.d/test.my.com_bundle.crt;
ssl_certificate_key /etc/nginx/conf.d/test.my.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
if ( $scheme = 'http' ){
rewrite ^(.*)$ https://$host$1 permanent;
}
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
再重启nginx
nginx -t
nginx -s reload
参考文档
注意:如果是泛域名则需要建子账号获取Tencent_SecretId和Tencent_SecretKey,更常用的是单独域名的则不需要建子账号,使用nginx,直接执行下面脚本
第一步curl有点慢或者超时,多试几次吧
服务器操作
采用新建子账号 acme,并授权dns方式,重点是获取Tencent_SecretId
和Tencent_SecretKey
某项目
找到nginx配置文件目录 /etc/nginx/conf.d/
新建 xxxx.conf文件,每个域名一个 *.conf 配置文件
文件内容,主要是要生成 key 和 crt 文件
# 执行器仪表监控项目, 配置https
server {
listen 80;
listen 443 ssl;
server_name xxxx.xxxxxx.cn;
ssl_certificate /etc/nginx/conf.d/xxxx.xxxxxx.cn_bundle.crt;
ssl_certificate_key /etc/nginx/conf.d/xxxx.xxxxxx.cn.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
#将http请求转成https
if ( $scheme = 'http' ){
rewrite ^(.*)$ https://$host$1 permanent;
}
location / {
proxy_pass http://127.0.0.1:50281; # 转发到前端容器内nginx
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
执行shell脚本,注意把里面域名都替换成自己的
curl https://get.acme.sh | sh -s email=自己邮箱@qq.com
crontab -l
cd ~/.acme.sh
sh acme.sh --set-default-ca --server letsencrypt
// 方式一:泛域名,这里是泛域名方式要制定 dns 服务商,所以需要上面建立子账号获取Tencent_SecretId和Tencent_SecretKey
export Tencent_SecretId="xxxxxxxxxxxxxxxxxxxxxxx"
export Tencent_SecretKey="xxxxxxxxxxxxxxxxxxxxxxx"
sh acme.sh --issue --dns dns_tencent -d xxxx.xxxxxx.cn
// 常用方式二:单独域名,如果是单独域名就不用建立子账号获取Id和Key,并指定nginx模式
sh acme.sh --issue -d xxxx.xxxxxx.cn --nginx
sh acme.sh --install-cert -d xxxx.xxxxxx.cn \
--key-file /etc/nginx/conf.d/xxxx.xxxxxx.cn.key \
--fullchain-file /etc/nginx/conf.d/xxxx.xxxxxx.cn_bundle.crt \
--reloadcmd "service nginx force-reload"
可以看到nginx中 key和crt文件已经重新生成