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

在Cloud Run中用Nginx配置多子域名遇500错误的排查请求

问题根源与解决方案

根源分析

从日志和配置来看,导致sub2.example.com返回500错误的核心原因有两个:

  1. 证书验证请求处理失败:日志中的请求来自Google-Certificates-Bridge,是Google为自定义域名颁发SSL证书时的ACME验证请求。你的Nginx配置中没有专门处理/.well-known/acme-challenge/路径的规则,当验证请求到达时,Nginx会通过try_files尝试返回index.html,如果该文件无法被读取(权限问题、文件缺失),就会触发500内部错误。
  2. sub2站点目录/文件异常:虽然sub1正常,但sub2对应的/usr/share/nginx/html/sub2目录可能缺失、文件权限不正确(Nginx进程无读取权限),或者index.html/50x.html文件损坏/缺失,导致Nginx无法正常返回内容,触发500错误。

注:第二个server块中location的多余缩进不影响Nginx功能,不是错误根源。

解决方案

1. 修正Nginx配置,处理ACME验证请求

添加专门的规则处理证书验证请求,避免触发500错误,推荐两种配置方式:

全局配置(所有域名共用)

在http块下添加规则,所有server自动继承:

http {
    # 保留原有基础配置(如include mime.types等)
    
    # 处理ACME证书验证请求
    location /.well-known/acme-challenge/ {
        root /usr/share/nginx/html;
        try_files $uri =404;
    }

    # 你的两个server块...
}

单个server块配置

在sub2的server块内单独添加:

server {
    listen $PORT;
    listen  [::]:$PORT;
    server_name sub2.example.com;

    # 添加ACME验证处理
    location /.well-known/acme-challenge/ {
        root /usr/share/nginx/html;
        try_files $uri =404;
    }

    # 原有location /规则...
}

2. 确保站点文件目录与权限正确

在Dockerfile中添加命令,保证sub2目录和文件的权限符合Nginx运行要求:

# 复制站点文件
COPY sub1 /usr/share/nginx/html/sub1
COPY sub2 /usr/share/nginx/html/sub2

# 设置正确的权限
RUN chown -R nginx:nginx /usr/share/nginx/html \
    && chmod -R 755 /usr/share/nginx/html \
    && chmod 644 /usr/share/nginx/html/sub1/*.html \
    && chmod 644 /usr/share/nginx/html/sub2/*.html

3. 验证Cloud Run域名映射状态

进入Cloud Run服务的自定义域名页面,确认sub1.example.com和sub2.example.com的状态均为Active,无验证失败提示。若状态异常,重新完成域名验证流程。

4. 查看Nginx详细错误日志

在Cloud Run日志页面切换到容器日志(而非请求日志),查看Nginx输出到stderr的错误信息,可直接定位500错误的具体原因(如文件缺失、权限拒绝等),辅助进一步排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:55:51