nginx et slash avec proxy pass
Je suis en utilisant la configuration suivante pour nginx 1.4.1:
serveur { écouter 8000; server_name correcte.nom.gr; emplacement /test/register { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Serveur $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1; } }
Ce que je veux faire, c'est quand les utilisateurs vist http://correct.name.gr:8000/test/register/
ils devraient être acheminé vers l'apache qui tourne sur le port 80.
Lorsque je visite http://correct.name.gr:8000/test/register/
je obtenir des résultats corrects (index.php).
Lorsque je visite http://correct.name.gr:8000/test/register/asd
je obtenir des résultats corrects (404 de apache).
Lorsque je visite http://correct.name.gr:8000/test/asd
je obtenir des résultats corrects (404 de nginx).
Lorsque je visite http://correct.name.gr:8000/test/register123
je obtenir des résultats corrects (404 de apache).
Le problème est lorsque je visite http://correct.name.gr:8000/test/register
. Je reçois un 301 de réponse et je suis redirigé vers la http://localhost/test/register/
(avis de la barre oblique et bien sûr le 'localhost')!!!
Je n'ai pas fait d'autres configurations de nginx pour mettre des barres obliques ou quelque chose de similaire. Savez-vous quel est le problème ? Je veux http://correct.name.gr:8000/test/register
de travailler correctement par l'utilisation de proxy d'apache (ou si pas possible, au moins à l'émission d'un message d'erreur 404 et non une redirection vers le localhost de l'utilisateur).
Mise à jour de 1: j'ai essayé http://correct.name.gr:8000/test/register
à partir d'un autre ordinateur que celui avec lequel j'ai eu le mauvais comportement d'hier.. Ainsi, il a travaillé: je viens de recevoir un 301 de la réponse que m'a indiqué le bon http://correct.name.gr:8000/test/register/
! Comment est-il possible de travailler à partir d'un ordinateur, mais pas de l'autre (je suis en utilisant le même navigateur Chrome dans les deux ordinateurs)? Je vais essayer à nouveau demain pour tester à partir d'un troisième pour voir le comportement.
Merci !
OriginalL'auteur Serafeim | 2013-07-02
Vous devez vous connecter pour publier un commentaire.
Ma conjecture est que votre serveur en amont (apache ou votre script) a déclenché une redirection vers la absolue url
http://localhost/test/register/
. Parce que vous utilisezhttp://127.0.0.1
dans votreproxy_pass
directive, nginx ne pas trouver une correspondance du nom de domaine et renvoie leLocation
en-tête.Je pense que la bonne solution est de ne PAS utiliser absolue rediriger si la redirection est à une url interne. C'est toujours une bonne pratique.
Toutefois, sans changer de serveur en amont, il y a deux solutions rapides.
vous pouvez utiliser
Cela indiquera nginx sur le nom de domaine en amont est
localhost
. Puis nginx saura remplacerhttp://localhost
parhttp://correct.name.gr:8000
quand il constate qu'une partie de laLocation
en-tête de l'amont.Une autre est d'ajouter un
proxy_redirect
ligne de force de nginx pour réécrire toute l'emplacement de l'en-tête avechttp://localhost/
.Je préfère la première solution parce que c'est plus simple. Il n'y a pas de recherche DNS généraux de l'aide
proxy_pass http://localhost;
parce que nginx la recherche à l'avance lorsqu'il démarre le serveur web.référence: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect
OriginalL'auteur Chuan Ma
Avez-vous déjà essayer de jouer avec server_name_in_redirect?
Cependant, je vous ai trouvé question par l'intermédiaire de google parce que je lance le même problème avec la barre oblique. Nginx forces une 301 vers la même URL avec un slash.
Juste pour éviter toute mise en cache du navigateur d'effets secondaires, je vous recommande plutôt de l'essai de ces redirections avec curl à partir d'un shell: "curl-IL correct.nom.gr:8000/test/s'inscrire"
Oui, très joli commentaire... Curl FTW !
OriginalL'auteur vreen