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

Certbot在Nginx反向代理环境下执行失败:出现404错误

Certbot在Nginx反向代理环境下执行失败:出现404错误

兄弟,碰到这个http-01挑战的404问题太常见了,我帮你一步步排查解决:

  • 先检查Nginx反向代理的路径规则
    你的Nginx可能把所有请求都转发给Mastodon后端了,导致ACME验证需要的.well-known/acme-challenge/路径被拦截。你可以在Nginx的server配置块里加一段专门处理这个路径的规则:

    location /.well-known/acme-challenge/ {
        root /var/www/html;
        allow all;
    }
    

    加完之后重启Nginx(sudo systemctl restart nginx),这段配置会让Nginx直接读取/var/www/html/.well-known/acme-challenge/下的文件,不经过反向代理,正好匹配Certbot的验证需求。

  • 确认80端口是否对外开放
    http-01挑战必须通过80端口访问,你先检查服务器的防火墙设置:
    运行sudo ufw status看看有没有允许80/tcp的规则,如果没有就执行sudo ufw allow 80/tcp,然后再试Certbot命令。

  • 验证域名解析是否正确
    确保你的域名pacsa.us确实指向服务器IP 94.23.75.107,你可以在本地运行nslookup pacsa.us或者dig pacsa.us,看看返回的IP是不是和你的服务器一致。有时候解析缓存或者配置错误会导致验证服务器找不到你的机器。

  • 手动测试验证路径的可访问性
    你可以手动创建一个测试文件来验证:

    1. 先创建目录(如果不存在的话):sudo mkdir -p /var/www/html/.well-known/acme-challenge/
    2. 创建测试文件:echo "test content" | sudo tee /var/www/html/.well-known/acme-challenge/test.txt
    3. 访问http://pacsa.us/.well-known/acme-challenge/test.txt,如果能看到内容说明路径没问题;如果还是404,检查/var/www/html的权限,执行sudo chown -R www-data:www-data /var/www/html确保Nginx能读取这个目录。
  • 换用webroot插件尝试
    如果Nginx插件一直有问题,你可以试试Certbot的webroot模式,这个模式不需要修改Nginx配置,只要指定webroot目录就行:

    certbot certonly --webroot -w /var/www/html -d pacsa.us -v
    

    这个命令会把验证文件放到/var/www/html下,只要Nginx能正常访问这个目录,验证就能通过。

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

火山引擎 最新活动