Django部署多个nginx反向代理后hostname获取错误的问题

发表时间:2019-11-24 22:47 | 分类:Python | 浏览:140 次

最近把用django写的网站部署到nginx反向代理后,其他都没什么问题,使用架构类似这样:

用户-->nginx(hostname1)-->nginx(hostname2)-->gunicorn(django)

django网站一般使用的是相对地址,也就是“/blog/zhangnq”格式,所以一般都不会有什么问题。但是当使用HttpResponsePermanentRedirect方法进行网址重定向的时候发现绝对地址中的hostname错了,应该访问http://hostname1/blog/zhangnq的地址,最后变成了http://hostname2/blog/zhangnq 。

nginx配置

20191124223700

proxy_set_header Host "hostname2";
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
                
proxy_pass http://1.1.1.1 ;

当用户访问hostname1访问,nginx代理请求1.1.1.1服务器servername是hostname2的站点,但是X-Forwarded-Host传递的是hostname1。

默认情况下,Django会忽略所有X-Forwarded标头,也就是说django服务器get_host方法获取到的http_host是hostname2。 如前所述的问题,那么我们可以通过设置USE_X_FORWARDED_HOST = True来将get_host设置为读取X-Forwarded-Host标头。

打开django项目settings.py文件,修改或添加如下行:

USE_X_FORWARDED_HOST = True

更改这个设置后,django重定向运行正常,问题解决。

参考网址:https://ubuntu.com/blog/django-behind-a-proxy-fixing-absolute-urls

本文标签:

本文链接:https://zhangnq.com/3167.html

欢迎您在本博客中留下评论,如需转载原创文章请注明出处,谢谢!

已经有2个回复
Comment (2)
Trackbacks (0)
  1. 软件帝  ( 2019.11.25 09:44 ) : #-9

    个人博客坚持更新不易 留言支持下 加油

    • 章郎虫  ( 2019.11.25 16:25 ) :

      谢谢支持。

  1. 还没有Trackbacks
一键脚本 博客历程 留言联系 文章归档 网站地图 谷歌地图 浙ICP备13025236号-4
托管于阿里云&七牛云 浙公网安备 33021202001057号
Copyright © 2010-2020 章郎虫博客 All Rights Reserved.