You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Nginx环境下无需开放80端口,使用Let’s Encrypt验证服务器所有权的方案咨询

Nginx环境下无需开放80端口,使用Let’s Encrypt验证服务器所有权的方案咨询

我太懂这种窘境了!之前80端口开放的时候,我一直用certbot --nginx -d domain_name这条命令一键搞定Let’s Encrypt证书申请和Nginx配置,全程顺畅得不行。但现在碰到客户不会开放80端口的情况,确实得换个验证思路——毕竟默认的HTTP-01验证是依赖80端口的,端口没开肯定过不了。

给你推荐几个靠谱的替代方案:

  • DNS-01验证方式:这是最适配这种场景的方案,它不需要开放任何公网端口,只需要你能修改目标域名的DNS解析记录就行。
    • 如果你的域名托管在支持Certbot插件的服务商(比如Cloudflare、AWS Route 53这些),可以直接用对应插件自动完成验证,以Cloudflare为例,命令大概是这样:
      certbot certonly --dns-cloudflare -d domain_name
      
      运行前需要先安装对应插件(比如certbot-dns-cloudflare),并配置好服务商的API密钥,全程会自动添加和删除验证用的TXT记录,不用手动操作。
    • 如果没有对应服务商的插件,也可以用手动DNS验证,执行命令:
      certbot certonly --manual --preferred-challenges=dns -d domain_name
      
      运行后Certbot会提示你添加一条特定的TXT记录到域名的DNS解析中,等这条记录全球生效(一般需要几分钟到几十分钟),再按回车继续,就能完成验证拿到证书了。
  • 若客户能开放443端口的备选:可以试试TLS-ALPN-01验证,这个依赖443端口对外开放,用Certbot的命令是:
    certbot certonly --nginx --preferred-challenges=tls-alpn-01 -d domain_name
    
    不过要是客户连443端口也无法开放,那还是DNS-01验证最稳妥。

拿到证书后,你依然可以用Certbot的Nginx插件自动配置站点,或者手动把证书路径写入Nginx的server块,后续的证书续期也可以用同样的验证方式自动完成。

备注:内容来源于stack exchange,提问作者achhainsan

火山引擎 最新活动