You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

服务器Let's Encrypt证书申请失败:curl报404但浏览器可访问

嘿,我碰到过类似的情况——服务器本地DNS解析跑偏,导致ACME挑战失败,浏览器能访问但服务器curl不行,核心就是本地解析指向了错误的经销商服务器IP。给你几个靠谱的解决步骤,按优先级来:

解决方案1:强制本地Hosts解析(最快速有效)

服务器的/etc/hosts文件优先级高于任何外部DNS服务器,直接在这里指定域名的正确IP就能绕开错误的DNS解析:

  1. 编辑hosts文件:
    vi /etc/hosts
    
  2. 在文件末尾添加一行(把[你的服务器IP]换成实际的服务器公网IP,所有涉事域名用空格分隔):
    123.45.67.89 example.com domain.nl
    
  3. 保存退出(vi中按Esc,输入:wq回车)。
  4. 测试解析是否生效:
    ping example.com
    nslookup example.com
    
    现在应该返回你指定的服务器IP了。
  5. 再次验证curl访问挑战文件:
    /usr/bin/curl -I -L -k -X GET http://example.com/.well-known/acme-challenge/test.txt
    
    正常情况下会返回HTTP/1.1 200 OK。
解决方案2:清空本地DNS缓存

如果服务器运行了DNS缓存服务(比如nscd或dnsmasq),旧的错误解析记录可能还在缓存里,需要清空:

  • 若用nscd缓存:
    sudo systemctl restart nscd
    
  • 若用dnsmasq缓存:
    sudo systemctl restart dnsmasq
    
  • 若用BIND服务器:
    sudo rndc flush
    
解决方案3:临时切换DNS服务器(可选)

如果不想修改hosts,可以临时把服务器的DNS换成其他公共DNS(比如Cloudflare的1.1.1.1),看是否能获取正确解析:

  1. 编辑/etc/resolv.conf:
    vi /etc/resolv.conf
    
  2. 替换原有的nameserver 8.8.8.8为:
    nameserver 1.1.1.1
    nameserver 1.0.0.1
    
  3. 注意:部分CentOS系统会自动覆盖resolv.conf,如果出现这种情况,需要修改网卡配置文件(/etc/sysconfig/network-scripts/ifcfg-*)里的DNS参数,然后重启网络服务:
    sudo systemctl restart network
    
后续验证

完成上述操作后,重新尝试Let's Encrypt证书申请:

  • 若用DirectAdmin面板:直接在面板的SSL管理模块重新申请即可。
  • 若用certbot命令:
    certbot certonly --webroot -w /path/to/your/webroot -d example.com -d domain.nl
    
    替换/path/to/your/webroot为涉事域名对应的网站根目录。

内容的提问来源于stack exchange,提问作者Salihan Pamuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:50:11