Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

django admin redirects to wrong port on save

Tags:

port

nginx

django

I have a django project set up with nginx+apache. The http port for outside access is 20111 which is then forwarded to the server machine (which has an internal IP) to port 80. So nginx listens on port 80 (and passes relevant requests to apache on port 5000).

Now the initial login can be reached from the outside via http://externalip:20111 - but when I complete an admin action, like saving an entry, I get redirected to http://externalip/path/to/model -- without the port 20111. The result is a timeout. How can I tell django to use a specific hostname/port (i.e. http://externalip:20111) for all admin redirects?

like image 328
pholz Avatar asked Dec 21 '11 14:12

pholz


1 Answers

When deploying applications behind a proxy or load balancer, it is common to rely on the X-Forwarded-Host header. Django has support for it

First of all, you have to setup nginx to send the proper headers. Add to your nginx host configuration (inside your location section):

proxy_set_header X-Forwarded-Host $host:20111;

Second, add to your settings.py:

USE_X_FORWARDED_HOST = True

It will allow django to trust X-Forwarded-Host headers from a request.

It should make it work for you. For security reasons, you should not trust every value sent in X-Forwarded-Host, so add your trusted domains/IPs to ALLOWED_HOSTS in settings.py

like image 128
Renan Ivo Avatar answered Oct 02 '22 09:10

Renan Ivo