同一服务器同域名不同路径的两个Django应用重定向问题
解决Django应用反向代理后重定向丢失前缀的问题
Nginx配置优化(无需逐个页面配置)
把针对App2的零散配置替换成下面的统一规则,一次性覆盖所有子路径:
location /app2/ { proxy_pass http://localhost:9696/; # 传递真实请求的Host信息,让Django知晓外部访问域名 proxy_set_header Host $host; # 传递真实客户端IP proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递请求协议(http/https),网站启用HTTPS时必须添加 proxy_set_header X-Forwarded-Proto $scheme; }
关键注意:proxy_pass结尾的/不能省略,它会让Nginx自动把/app2/后的路径拼接在localhost:9696/后面,比如访问website.com/app2/something时,实际转发到localhost:9696/something。
Django应用配置调整
修改App2的settings.py文件,添加以下配置,让Django生成URL时自动带上/app2前缀:
# 设置应用的代理前缀,对应Nginx的代理路径 FORCE_SCRIPT_NAME = '/app2' # 允许Django使用反向代理传递的Host头 USE_X_FORWARDED_HOST = True # 网站启用HTTPS时添加此配置(与Nginx的X-Forwarded-Proto对应) SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') # 确保域名在允许列表内 ALLOWED_HOSTS = ['website.com', 'localhost']
修改后重启App2的Docker容器,Django生成的重定向URL就会自动带上/app2前缀,访问子页面时重定向将指向正确的路径。
内容的提问来源于stack exchange,提问作者MijatTomić
相关产品推荐
相关产品推荐

