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

使用certbot --nginx为Nginx反向代理的Next.js应用申请证书失败

解决Nginx反向代理Next.js时Certbot Let's Encrypt认证失败的问题

你的Nginx配置存在明确问题:没有单独拦截Let's Encrypt认证所需的.well-known/acme-challenge路径请求,导致这些请求被转发到Next.js应用,而Next.js没有对应路由,返回404错误,最终Certbot验证失败。

解决方案:添加ACME挑战路径的Nginx规则

在Nginx的server块中,添加一个优先级更高的location块,专门处理ACME挑战请求,直接指向Certbot存放验证文件的目录,避免请求被转发到Next.js。

修改后的完整Nginx配置如下:

server {
  server_name subdomain.example.com;

  # 优先处理Let's Encrypt ACME挑战请求
  location ^~ /.well-known/acme-challenge/ {
    root /var/lib/letsencrypt/http_challenges/;
    default_type text/plain;
  }

  location / {
    proxy_pass http://localhost:8888;
    include /etc/nginx/proxy_params;
  }
  access_log /var/log/nginx/example-subdomain.log;
  error_log /var/log/nginx/example-subdomain-error.log crit;
  proxy_buffer_size 128k;
  proxy_buffers 4 256k;
  proxy_busy_buffers_size 256k;
  listen 80;
}

配置说明

  • ^~前缀确保该location块的优先级高于其他匹配规则,Nginx会优先用它处理.well-known/acme-challenge路径的请求
  • root指定Certbot自动生成验证文件的目录(默认路径为/var/lib/letsencrypt/http_challenges/)
  • default_type text/plain保证返回的验证内容类型符合Let's Encrypt的要求

操作步骤

  1. 编辑你的Nginx配置文件(例如/etc/nginx/sites-available/subdomain.example.com),添加上述location块
  2. 测试配置合法性:
    sudo nginx -t
    
  3. 配置合法后,重新加载Nginx:
    sudo systemctl reload nginx
    
  4. 重新运行Certbot命令申请证书:
    sudo certbot --nginx -d subdomain.example.com
    

内容的提问来源于stack exchange,提问作者Shift and Shiftine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 19:35:19