Nginx 泛域名https访问
概要: 在已安装带有https模块的Nginx前提下,利用acme.sh和腾讯云DNSPod,实现泛域名的https网站访问
创建时间: 2022.09.03 23:39:28
更新时间: 2023.08.16 22:26:58
注意:acme.sh和zsh环境有兼容性问题,请务必使用bash环境操作
获取acme.sh
注意将下面邮箱改成自己的
Bash |
---|
| bash
rm -rf ~/.acme.sh
wget -O - https://get.acme.sh | sh -s email=hello@world.com
|
配置alias
此部分内容为了以后可以直接任意位置 acmesh 调用 acme.sh 命令,可选
Bash |
---|
| echo "alias acmesh=/root/.acme.sh/acme.sh" >> .bashrc
echo "alias acmesh=/root/.acme.sh/acme.sh" >> .zshrc
|
在DNSPod上获取Token
访问 https://console.dnspod.cn/account/token/token 页面

首先,点击创建密钥

此时获得的ID和Token即是下一步要使用的DP_Id和DP_Key,务必保存好
然后,点击设置,将VPS的公网IP加入访问密钥的白名单


最后,将上面创建的密钥导入系统环境
Bash |
---|
| export DP_Id="xxxxx"
export DP_Key="yyyyyyyyy"
|
使用LetsEncrypt加密
注意,自从2021年8月后,acme.sh默认的CA厂家变成了ZeroSSL,而他是收费的,可以执行如下命令更改默认的 CA acmesh --set-default-ca --server letsencrypt
首先,为你的域名申请证书(注意将下文的 lzwang.ltd
改为自己申请的域名)
Bash |
---|
| acmesh --force --debug --issue --server letsencrypt --dns dns_dp -d lzwang.ltd -d *.lzwang.ltd
|
如果能看到下述文字提示,代表申请成功,否则自行排查问题

其次,将申请到的证书安装到指定位置,此处为 /root/ssl-keys/
目录下(注意将下文的 lzwang.ltd
改为自己申请的域名)
Bash |
---|
| acmesh --force --debug --install-cert -d lzwang.ltd --key-file /root/ssl-keys/lzwang.ltd.key --fullchain-file /root/ssl-keys/lzwang.ltd.cer
|
最后,配置并重新启动nginx,nginx.conf
示例server如下(注意将下文的 lzwang.ltd
改为自己申请的域名)
Nginx Configuration File |
---|
| server {
listen 443; # 监听的端口
server_name lzwang.ltd www.lzwang.ltd ;
# ssl证书地址
ssl_certificate /root/ssl-keys/lzwang.ltd.cer; # crt文件的路径
ssl_certificate_key /root/ssl-keys/lzwang.ltd.key; # key文件的路径
# ssl验证相关配置
ssl_session_timeout 5m; # 缓存有效期
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; # 加密算法
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 安全链接可选的加密协议
ssl_prefer_server_ciphers on; # 使用服务器端的首选算法
# 防止nginx代理websocket时,每隔75秒自动中断
proxy_connect_timeout 7d;
proxy_send_timeout 7d;
proxy_read_timeout 7d;
# 防止nginx代理websocket 报错
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
location / {
proxy_pass http://127.0.0.1:11111; # 反向代理自身端口,这样默认访问80端口也直接跳转指定的端口
proxy_set_header Host $proxy_host; # 修改转发请求头,让8000端口的应用可以受到真实的请求
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
|
重启nginx
证书自动更新
目前证书在 60 天以后会自动更新, 你无需任何操作. 今后有可能会缩短这个时间, 不过都是自动的, 你不用关心
以上来自官网说明,当然如果没有自动更新,手动更新一把也未尝不可(逃
参考