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

如何在带负载均衡的Google Cloud Run子路径部署Django应用?

解决Django部署在Cloud Run子路径的404问题

问题原因

设置FORCE_SCRIPT_NAME = "/directory"后,Django会自动在所有URL前添加该前缀,但你的负载均衡并未剥离请求路径中的/directory,导致实际处理时路径叠加为/directory/directory,触发404错误。

解决方案

方案一:调整负载均衡路径映射(推荐)

  • 修改负载均衡的URL映射规则:将https://example.com/directory/*的请求转发到Cloud Run服务时,剥离/directory前缀,转发到服务的/*路径。
  • 保留settings.py中的FORCE_SCRIPT_NAME = "/directory"配置,确保Django生成的URL自动带上/directory前缀。
  • 确认settings.py的关键配置:
    USE_X_FORWARDED_HOST = True
    SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
    ALLOWED_HOSTS = ['example.com']  # 根据实际域名调整,可使用通配符
    
  • 保持现有URLconf不变,此时访问https://example.com/directory会被转发到服务的根路径/,匹配directory.urls的空路径,返回正确内容。

方案二:调整Django URLconf(无需修改负载均衡)

  • 移除settings.py中的FORCE_SCRIPT_NAME = "/directory"配置。
  • 修改主项目的example_dir/urls.py,给所有路径添加directory前缀:
    urlpatterns = [
        path("directory/admin/", admin.site.urls),
        path("directory/", include("directory.urls")),
    ]
    
  • 保持directory/urls.py的配置不变,此时访问https://example.com/directory会直接匹配到directory.urls的空路径,避免路径叠加。

验证

两种方案均能解决404问题,方案一更符合反向代理子路径部署的最佳实践,可确保Django生成的静态资源、管理后台等URL自动带上/directory前缀,避免后续路径问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 08:38:49