web-dev-qa-db-fra.com

Nginx: Comment transférer une demande http vers un autre port?

Ce que je veux faire, c'est

Quand quelqu'un visite http://localhost/route/abc la réponse du serveur est exactement la même que http://localhost:9000/abc

Maintenant, je configure mon Nginx comme ceci:

location /route {
    proxy_pass  http://127.0.0.1:9000;
}

La requête http est envoyée au port 9000 correctement, mais le chemin qu'il a reçu est http://localhost:9000/route/abc ne pas http://localhost:9000/abc.

Toute suggestion ?

76
WoooHaaaa

Je déteste la subtilité ici, mais essayez d'ajouter un/à la fin de 9000 comme ci-dessous. Il n'ajoutera plus "route" à la demande transférée maintenant.

location /route {
    proxy_pass  http://127.0.0.1:9000/;
}
76
Shark

Je pense que vous pouvez utiliser la réécriture pour supprimer la partie supplémentaire de l'URL. Dans votre cas, je pense que vous pourriez utiliser:

location /route/ {
    rewrite ^/route/?(.*)$ /$1 break;    
    proxy_pass  http://127.0.0.1:9000;
    proxy_set_header Host $Host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Cependant, si votre application contient des liens internes, ils peuvent toujours pointer vers/abc/foo, et si vous le faites, ils doivent plutôt pointer vers/route/abc/foo pour que la demande brute arrive correctement. Il est préférable de laisser la configuration nginx telle quelle et de configurer votre application pour être conscient qu'elle réside dans un sous-répertoire, si vous le pouvez.

Je sais que c'est une vieille question, mais c'était le meilleur coup google pour moi quand j'essayais de résoudre le même problème!

41
user2428107

Essayez ce qui suit

location /route/ {
        proxy_pass  http://127.0.0.1:9000;
        proxy_set_header Host $Host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
19
ALex_hha

vim nginx.conf

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

  server {
    listen 8080;

    location / {
      proxy_pass http://compute-1-36:8787;
      proxy_redirect http://compute-1-36:8787/ $scheme://$Host:8080/;
    }
  }

Ce code écoute sur 8080 et redirige vers le port 8787 sur compute-1-36. Vous pouvez sélectionner un autre chemin dans l'emplacement /

7
user3266656