Nginx反向代理下Django子目录部署?next=跳转路径错误如何解决
Django子目录反向代理部署重定向问题解决方案
1. Django 配置调整
修改项目settings.py文件,添加以下配置:
- 声明服务挂载的子目录前缀,强制Django生成所有URL时自动携带该前缀:
FORCE_SCRIPT_NAME = '/myapp' - 开启反向代理请求头识别,避免域名、访问协议识别错误:
USE_X_FORWARDED_HOST = True SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') - 调整登录登出相关默认路径,无需手动加前缀,Django会自动补全配置的子目录:
LOGIN_URL = '/accounts/login/' LOGOUT_REDIRECT_URL = '/'
2. Nginx 反向代理配置调整
确保反向代理传递正确的请求头,同时路径重写规则正确,示例配置如下:
location /myapp/ { # 替换为你的Django服务实际监听地址和端口 proxy_pass http://127.0.0.1:8000/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 传递子目录前缀给Django,和FORCE_SCRIPT_NAME配置对应 proxy_set_header SCRIPT_NAME /myapp; }
注意proxy_pass末尾的斜杠不能省略,该配置会自动把请求路径中/myapp/前缀剥离后再转发给Django服务,Django内部路由无需额外处理该前缀。
3. 生效验证
修改完成后重启Django服务和Nginx服务,再次访问需要登录鉴权的页面,生成的重定向链接会自动以https://www.example.com/myapp为根路径,符合预期。
内容的提问来源于stack exchange,提问作者user1015777
相关产品推荐
相关产品推荐

