跳转至

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
1
2
3
4
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 页面
image.png
首先,点击创建密钥
image.png
此时获得的ID和Token即是下一步要使用的DP_Id和DP_Key,务必保存好
然后,点击设置,将VPS的公网IP加入访问密钥的白名单
image.png
image.png
最后,将上面创建的密钥导入系统环境

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
如果能看到下述文字提示,代表申请成功,否则自行排查问题
image.png
其次,将申请到的证书安装到指定位置,此处为 /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
Bash
nginx -s stop
nginx 

证书自动更新

目前证书在 60 天以后会自动更新, 你无需任何操作. 今后有可能会缩短这个时间, 不过都是自动的, 你不用关心

以上来自官网说明,当然如果没有自动更新,手动更新一把也未尝不可(逃

参考