使用nginx做反代理,设置的访问端口不是80,但是当打开网站重定向到登陆页面的时候,却转向到80端口上,导致打不开的问题。
解决办法:
当一个Django应用部署在代理或负载均衡器后面的时候,解决这个问题需要依赖 X-Forwarded-Host
报头提供转发地址。
首先,添加下面字段到 nginx 的主机配置文件(插入到 location 部分),用于配置 nginx 发送出合适的报头:
1 | proxy_set_header X-Forwarded-Host $host:应用提供的访问端口号; |
其次,添加下面字段到 Django settings.py
文件,用于配置 Django 信任接收到的 X-Forwarded-Host
报头:
1 | USE_X_FORWARDED_HOST = True |
现在它应该能正常工作了。
另外,出于安全原因,应用不应该无条件信任接收到的 X-Forwarded-Host
参数,正确的做法是在Django settings.py
的ALLOWED_HOSTS
配置中加入可信任的域名或者IP。