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.