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

Docker环境下Certbot域名认证失败问题求助

Let's Encrypt证书申请失败排查与解决

错误信息

Certbot failed to authenticate some domains (authenticator: webroot).
The Certificate Authority reported these problems:
Domain: dev-core-app.example.com
Type: unauthorized
Detail: 100.100.100.100: Invalid response from http://dev-core-app.example.com/.well-known/acme-challenge/XyWgWZVTZgMzvYjFCYVVypLNeDhgE1lNFVN2U0eaubk: 404

Domain: www.dev-core-app.example.com
Type: unauthorized
Detail: 100.100.100.100: Invalid response from http://www.dev-core-app.example.com/.well-known/acme-challenge/OnGprMCbHeQRdas5cST7bsYNpa762PwaDLLrsU2H7Bg: 404

当前配置

Nginx配置文件

server {
    listen 80;

    server_name dev-core-app.example.com;
    server_tokens off;
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";

    error_log /var/log/nginx/sdr-fe-nginx-error.log info;
    access_log /var/log/nginx/sdr-fe-nginx-access.log;

    ignore_invalid_headers off;
    underscores_in_headers on;

    # Allow larger than normal headers
    large_client_header_buffers 4 64k;
    proxy_buffers         8 16k;  # Buffer pool = 8 buffers of 16k
    proxy_buffer_size     16k;    # 16k of buffers from pool used for headers
    

    location /.well-known/acme-challenge/ {
        rewrite ^/\.well-known/acme-challenge(.*) $1 break;
        root /var/www/certbot;
    } 
    location /{
        proxy_pass http://gateway_us/;
        proxy_set_header Authorization $http_authorization;
        proxy_pass_header Authorization; 
        proxy_set_header Host $http_host;
    }
}

Docker Compose配置

nginx:
    environment:
      - TZ=Asia/Singapore
    image: nginx:latest
    ports:
      - "80:80"
      - "443:443"
    restart: unless-stopped
    networks: 
    - ${NETWORK}
    volumes:
      - ./fe_nginx:/etc/nginx/conf.d
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
      - ./data/certbot/conf:/etc/letsencrypt
      - ./data/certbot/www:/var/www/certbot

  certbot:
    image: certbot/certbot
    volumes:
      - ./data/certbot/conf:/etc/letsencrypt
      - ./data/certbot/www:/var/www/certbot

问题分析与解决步骤

1. 修正ACME验证路径的Rewrite规则

你的Nginx配置中,/.well-known/acme-challenge/的rewrite规则错误,导致Nginx无法找到Certbot生成的验证文件:

  • Certbot会将验证文件写入/var/www/certbot/.well-known/acme-challenge/目录下
  • 你的rewrite规则会把请求路径从/.well-known/acme-challenge/xxx改为xxx,导致Nginx去/var/www/certbot/xxx查找文件,而非正确的路径

修改后的location块:

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

2. 添加www域名的Server配置

错误信息显示Let's Encrypt同时验证了dev-core-app.example.com和www.dev-core-app.example.com,但你的Nginx配置仅处理了主域名,导致www域名的验证请求返回404。

更新server_name行:

server_name dev-core-app.example.com www.dev-core-app.example.com;

3. 确保证书申请命令包含所有域名

检查init-letsencrypt.sh脚本中的Certbot命令,确认同时包含主域名和www域名,例如:

certbot certonly --webroot -w /var/www/certbot \
  -d dev-core-app.example.com -d www.dev-core-app.example.com

4. 重启Nginx并重新申请证书

  • 重启Nginx容器加载新配置:
docker-compose restart nginx
  • 重新运行init-letsencrypt.sh脚本发起证书申请

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:57:56