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

Nginx无法为Certbot的ACME挑战提供.well-known文件问题排查

问题分析与解决

你的核心问题是Nginx HTTP server块的指令顺序错误,导致所有HTTP请求都被强制重定向到HTTPS,而HTTPS配置中没有处理ACME挑战的规则,最终返回404。

具体问题点

你当前的HTTP server配置里,return 301是直接写在server块下的顶级指令,Nginx会优先执行这个指令——不管请求是不是匹配/.well-known/acme-challenge/路径,都会被重定向到HTTPS。而HTTPS的server块仅配置了反向代理到localhost:9000,没有对应ACME挑战文件的location规则,所以Let's Encrypt的验证请求跳转到HTTPS后找不到文件,返回404。

修复步骤

1. 修正Nginx HTTP配置

将return 301放到location /块中,确保只有非ACME挑战的请求才会被重定向:

server {    
    listen 80;
    server_name example.com;

    # 优先处理ACME挑战请求,不重定向
    location ^~ /.well-known/acme-challenge/ {        
        alias /opt/bitnami/apps/letsencrypt/.well-known/acme-challenge/;
        # 可选:明确指定文件类型,避免MIME类型问题
        default_type text/plain;
    }     

    # 其他所有HTTP请求重定向到HTTPS
    location / {
        return 301 https://$server_name$request_uri;
    }
}

2. 验证文件权限

确保Nginx进程有权限读取ACME挑战目录的文件:

# Bitnami的Nginx通常使用daemon用户,设置目录和文件权限
sudo chown -R daemon:daemon /opt/bitnami/apps/letsencrypt/.well-known/acme-challenge/
sudo chmod -R 755 /opt/bitnami/apps/letsencrypt/.well-known/acme-challenge/
sudo chmod 644 /opt/bitnami/apps/letsencrypt/.well-known/acme-challenge/test.html

3. 检查并重启Nginx

# 验证配置语法
sudo nginx -t
# 重启Nginx生效
sudo /opt/bitnami/ctlscript.sh restart nginx

4. 测试访问

再次访问http://example.com/.well-known/acme-challenge/test.html,应该能直接看到测试文件内容,不会被重定向到HTTPS。

5. 重新执行证书续期脚本

sudo /opt/bitnami/letsencrypt/lego --path /opt/bitnami/letsencrypt --email="me@example.com" --http --http-timeout 30 --http.webroot /opt/bitnami/apps/letsencrypt --domains=example.com --user-agent bitnami-bncert/2.0.0 renew

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 06:05:09