以下方法是我从网上找来的,并没有完全解决我的问题,还需要进一步处理,如果找到方法会进一步完善。

在我们部署django应用的时候,通常的做法是用uwsgi或者gunicorn等wsgi server运行django工程,然后在前面放一个nginx做反向代理,但是如果我们nginx没有使用80端口的话,有可能访问应用的/跳转的时候会出现404错误,丢失了端口,

跳转到另一个网站或者404,如何解决这个问题呢?很简单

1. django settings中添加如下配置


USE_X_FORWARDED_HOST = True

2. nginx中添加如下配置

proxy_set_header   X-Forwarded-Host  $host:$PORT;

其中$PORT表示你当前访问的端口,这样当你访问/或者其他需要跳转的链接的时候就
会带上端口信息了
 

最近使用 django+gunicorn+nginx 部署 archer 项目时,反向代理使用的是 9123 端口,当访问http://127.0.0.1:9123 时会重定向到http://127.0.0.1/login/, 导致无法访问,需要手动添加端口,同时 admin 管理后台的跳转也是类似情况,异常麻烦,最后记录下解决方案。

settings 文件增加

1
2
# 解决nginx部署跳转404
USE_X_FORWARDED_HOST = True

nginx 配置修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
server{
    listen 9123; #监听的端口
    server_name archer;

    location / {
      proxy_pass http://127.0.0.1:8888;
      proxy_set_header Host $host:9123; #这里增加监听的端口即可
      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;
    }

    location /static {
      alias /opt/archer/static;
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

reload 配置,重新访问,重定向时就会自动增加端口信息了

更多推荐