Django continue de changer l’URL de http: // localhost / à http://127.0.0.1:8080/

Comme le titre le décrit, Django continue de changer mon URL de /localhost/ vers /127.0.0.1:8080/ ce qui continue à gâcher mes fichiers statiques de dissortingbution par Nginx. Des idées pourquoi ça marche? Merci!

/ * * EDIT * * / Voici la configuration de Nginx:

 server { listen 80; ## listen for ipv4 listen [::]:80 default ipv6only=on; ## listen for ipv6 server_name localhost; access_log /var/log/nginx/localhost.access.log; location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|html|htm)$ { root /srv/www/testing; } location / { proxy_pass http://127.0.0.1:8080/; proxy_redirect off; } location /doc { root /usr/share; autoindex on; allow 127.0.0.1; deny all; } location /images { root /usr/share; autoindex on; } 

Voici le fichier de configuration Apache:

  ServerName testing DocumentRoot /srv/www/testing  Order allow,deny Allow from all  WSGIScriptAlias / /srv/www/testing/apache/django.wsgi  

edit2:

http://wiki.nginx.org/HttpProxyModule#proxy_redirect

http://wiki.nginx.org/HttpProxyModule#proxy_pass

Ce que je pense, c’est que lorsque vous utilisez votre httpresponseredirect , l’en HTTP_HOST tête HTTP_HOST lui donne le 127.0.0.1:8080 , à cause de votre paramètre proxy_pass .

HttpResponseRedirect de Django semble enlever mon sous-domaine?

Django a des méthodes qu’il applique toujours à une réponse. L’un d’entre eux est django.utils.http.fix_location_header. Cela garantit qu’une réponse de redirection contient toujours un URI absolu (comme requirejs par les spécifications HTTP).

Si vous utilisez VirtualHost, vous devez définir USE_X_FORWARDED_HOST = True dans vos parameters.py

Voici la référence: Django Doc pour Settings.py

USE_X_FORWARDED_HOST Nouveau dans Django 1.3.1: S’il vous plaît, voir les notes de publication

Par défaut: faux

Un booléen qui spécifie s’il faut utiliser l’en-tête X-Forwarded-Host de préférence à l’en-tête Host. Cela ne devrait être activé que si un proxy qui définit cet en-tête est utilisé.

Voici un exemple de code:

 import os, socket PROJECT_DIR = os.path.dirname(__file__) on_production_server = True if socket.gethostname() == 'your.productionserver.com' else False DEBUG = True if not on_production_server else False TEMPLATE_DEBUG = DEBUG USE_X_FORWARDED_HOST = True if not on_production_server else False 

A eu le même problème (les redirections django sont arrivées au navigateur avec le “: 8080” ajouté). Après d’autres recherches, j’ai trouvé des informations sur nginx. Ce qui suit a résolu le problème …

Dans votre configuration nginx, remplacez …

  proxy_redirect off; 

avec….

  proxy_redirect http://127.0.0.1:8080/ http://127.0.0.1/; 

N’oubliez pas de redémarrer votre démon nginx. Cela oblige nginx à supprimer le 8080 des paquets qui vont de Apache au navigateur. Par exemple, une redirection de django via apache, http://127.0.0.1:8080/my/test/file.html deviendra http://127.0.0.1/my/test/file.html après que nginx l’ait renvoyé au serveur. client.

Maintenant, vous n’aurez plus à modifier votre code django.