2009-08-19 8 views
0

Je suis coincé avec cela, mes compétences dans le domaine des serveurs web sont pauvres ...règle de réécriture simple pour un nginx + apache2 avec mod_wsgi

J'ai une action Nginx comme un proxy pour un Apache2 en cours d'exécution avec mod_wsgi et mod_rewrite. Ce que je veux faire est de réécrire chaque URL de www.example.com à example.com, c'est-à-dire de supprimer la partie www de chaque requête d'URL avant de la diffuser. Ceci est la disposition des différents fichiers de configuration:

=== === /etc/nginx/sites-enabled/example.com:

http://dpaste.com/82638/

===/etc/apache2/sites-enabled/example.com ===:

http://dpaste.com/hold/82645/

=== === /home/nabuco/public_html/example.com/example/apache/example.wsgi:

http://dpaste.com/82643/

Dans mon ancien ensemble Ï avait un mod_python en cours d'exécution Apache2, et la seule chose que je devais faire rangeais un fichier .htaccess comme ceci:

Options -Indexes 
RewriteEngine On 
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC] 
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L] 

Cela a fonctionné parfaitement. Mais j'ai essayé de mettre le même fichier .htaccess dans /home/nabuco/public_html/nomadblue.com/nomadblue/apache/.htaccess. Si je lance une requête sans www menant, comme http://example.com/ ou http://example.com/whatever, tout va bien. Cependant, si je tente la version www de http://www.example.com/ Je suis redirigé vers:

http://example.com/example.wsgi/

Dois-je exécuter des règles de réécriture de nginx au lieu? J'ai essayé aussi, en ajoutant ceci au fichier de configuration nginx:

rewrite ^/(.*) http://example.com/$1 permanent; 

mais maintenant je reçois ce que Firefox appelle une « boucle circulaire » ...

Qui puis-je obtenir ce (je suppose trivial) chose en haut?

Merci à l'avance,

Hector

Répondre

1

D'accord, j'ai trouvé la solution pour éviter la boucle circulaire ... en créant deux server sections dans mon fichier de configuration nginx, un pour www.example.com - qui a la règle de réécriture suggérée par rzab - et l'autre pour example.com, qui contient toutes les autres directives.

2

Le plus simple est de réécrire avec nginx. Mettez cette règle de réécriture dans un dédié « serveur » lié à www.example.com

 
server { 
    listen 80; 
    server_name www.example.com; 
    rewrute ^/(.*) http://example.com/$1 permanent; 
} 
+0

Cela ne fonctionne pas avec ma configuration, car mon Firefox me signale quand j'essaye de charger la page, il fait une boucle permanente. Je ne sais pas où dois-je mettre la réécriture, donc ... – nabucosound

+0

Eh bien, il est toujours préférable d'avoir un serveur déclaré "par défaut" (dans la directive listen) explicitement. Sinon, nginx a tendance à choisir le premier déclaré en doute, ce qui a conduit à ces boucles. Désolé d'être laconique. Je suis content que vous ayez compris le problème. – rzab

Questions connexes