Google Cloud Load Balancer与App Engine Blobstore兼容问题求助:/_ah/upload/请求返回404错误
这问题我之前帮好几个开发者排查过,核心原因是GCP的Blobstore上传端点(/_ah/upload/)是App Engine原生服务负责转发处理的——你不需要单独把Blobstore添加为负载均衡的后端服务,而是要确保LB把这类请求正确路由到你的App Engine应用,再由App Engine内部转发到Blobstore。
下面是具体的排查和解决步骤:
调整负载均衡的URL映射规则
你需要在LB的URL映射里,新增一条规则:把/_ah/upload/*路径的请求专门路由到你的App Engine服务(而不是其他自定义后端比如Cloud Run、Compute Engine)。这个路径是App Engine的特殊路由,只有App Engine runtime能正确处理并转发到Blobstore,所以必须确保LB不会把这些请求分流到其他地方。检查App Engine的基础配置
确认你的App Engine应用已经启用了Blobstore服务(默认是开启的,但可以在GCP控制台的「App Engine -> 应用设置」里确认)。另外,检查你生成上传URL的代码逻辑——必须用官方SDK提供的方法(比如Python的blobstore.create_upload_url()),这类方法生成的URL会自动绑定到你的App Engine服务,确保后续请求能被正确处理。验证Serverless NEG(如果用了的话)
如果你的LB是通过Serverless NEG指向App Engine的,要确保NEG配置包含了你的App Engine服务的所有版本,并且没有设置路径过滤规则排除/_ah/upload/。同时检查LB的转发规则,确认HTTP/HTTPS端口(80/443)的配置正确,且没有防火墙规则阻止请求到达App Engine。用Cloud Logging追踪请求轨迹
这是排查这类问题最有效的方式:- 查看LB的访问日志,确认
/_ah/upload/的请求是否被正确路由到了App Engine后端; - 查看App Engine的请求日志,确认这些请求是否到达了你的应用,或者是否被App Engine内部转发到Blobstore;
如果日志显示请求根本没到App Engine,那肯定是URL映射的问题;如果到了App Engine但返回404,要检查你的应用代码有没有自定义路由覆盖了/_ah/upload/(比如Flask/Django里不小心注册了这个路径的路由)。
- 查看LB的访问日志,确认
HTTPS负载均衡的额外注意事项
如果你的LB是HTTPS的,要确保生成上传URL时指定了HTTPS协议。有些旧代码可能默认生成HTTP的上传URL,当LB强制HTTPS时,会导致重定向异常或者404。比如Python SDK里可以用blobstore.create_upload_url(..., secure=True)来生成HTTPS的上传URL。
最后再强调一下:Blobstore不需要单独作为LB的后端,它是和App Engine深度集成的——只要让/_ah/upload/*的请求先到你的App Engine服务,剩下的转发工作App Engine会自动处理,就和你不用LB时的流程一样。
内容的提问来源于stack exchange,提问作者Guy Armitage

