App Engine标准环境下Cloud Endpoints 2.0自定义域名API无法访问求助
看起来你已经完成了大部分配置,但出现404错误通常是路径匹配或者部署环节出了问题,我帮你梳理几个容易遗漏的点:
1. 不要省略Endpoints的核心路径前缀/_ah/api
你原来的API访问路径是https://api-dot-[projectId]-appspot.com/_ah/api/myApi/v1/path,其中/_ah/api是EndpointsServlet的核心映射路径——自定义域名下访问时同样需要保留这个前缀。
你现在尝试的https://api.mydomain.app/myApi/v1/path缺少了这个关键前缀,正确的访问路径应该是:
https://api.mydomain.app/_ah/api/myApi/v1/path
这是因为你的web.xml里明确把EndpointsServlet映射到了/_ah/api/*,没有这个前缀的请求不会被Endpoints处理,自然会返回404。
2. 确认dispatch.xml的部署位置和生效状态
dispatch.xml是全局路由规则,必须部署在**App Engine默认模块(通常是default模块)**的WAR包中,而不是api模块里。很多人会误把它放在目标模块里,导致规则完全不生效。
另外,修改dispatch.xml后,需要重新部署默认模块才能让规则生效,示例命令如下:
gcloud app deploy default/dispatch.xml
你也可以通过GCP控制台的App Engine > 服务页面,查看dispatch路由是否已经正确显示api.mydomain.app/*指向api模块,来验证规则是否生效。
3. 验证自定义域名的DNS映射完全生效
虽然你配置了CNAME记录,但DNS解析可能存在延迟,尤其是GoDaddy的DNS有时候生效较慢。你可以通过命令行验证解析结果:
nslookup api.mydomain.app
或者
dig api.mydomain.app
确认返回的IP地址是Google托管服务器的地址(通常以192.168.x.x或2607:f8b0:x.x开头)。如果解析结果不对,需要等待DNS生效,或者检查GoDaddy的记录配置是否正确(比如CNAME的*是否覆盖了api子域名)。
4. 检查api模块的部署状态
确保api模块已经成功部署,并且有正常运行的实例:
- 登录GCP控制台,进入App Engine > 服务
- 找到
api模块,确认状态是运行中,且版本是你期望的版本 - 如果模块刚部署,可能需要等待几分钟让实例完全启动
5. 可选:直接在自定义域名设置中映射子域名到模块
如果你不想依赖dispatch.xml,可以直接在App Engine的自定义域名页面,把api.mydomain.app直接映射到api模块:
- 进入App Engine > 设置 > 自定义域名
- 找到你添加的
mydomain.app域名,点击添加子域名 - 输入
api,选择api模块和对应的版本,保存设置
这种方式更直接,也能避免dispatch.xml配置错误的问题。
按照以上步骤排查后,应该能解决404的问题。如果还是不行,可以查看App Engine的日志 > 请求日志,筛选api模块的请求,看看具体的请求路径和路由匹配情况,进一步定位问题。
内容的提问来源于stack exchange,提问作者Tamer Saleh

