Nginx: Bir http isteğini başka bir porta nasıl iletirim?


65

Yapmak istediğim şey

Birisi http://localhost/route/abcsunucu yanıtını ziyaret ettiğinde aynı yanıtlahttp://localhost:9000/abc

Şimdi Nginx'imi şöyle yapılandırdım:

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

Http isteği 9000doğru port gönderilir , ancak aldığı yol http://localhost:9000/route/abcdeğildir http://localhost:9000/abc.

Herhangi bir öneri ?

Yanıtlar:


65

Buradaki incelikten nefret ediyorum ama 9000'in sonuna aşağıdaki gibi bir / eklemeyi deneyin. Artık artık iletilen talebe "rota" eklemeyecek.

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

4
Bu kabul edilen cevap olmalı. Basitçe eklemek /, konumda listelenen öneki kaldırma yöntemi olarak belgelenmiştir.
Bernard

40

URL'nin ekstra bölümünü kaldırmak için yeniden yazma kullanabileceğinizi düşünüyorum. Senin durumunda kullanabileceğini düşünüyorum:

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;
}

Ancak, uygulamanızın içinde dahili bağlantılar varsa, yine de / abc / foo'ya yönlendirebilirler ve bunu yaparsanız, ham isteğin doğru şekilde gelmesi için bunun yerine / route / abc / foo'ya bakmaları gerekir. Nginx config'i olduğu gibi bırakmaktan daha iyi olabilir ve bunun yerine uygulamanızı bir alt dizinde yaşayacağının farkında olacak şekilde yapılandırmak daha iyi olabilir.

Bunun eski bir soru olduğunu biliyorum, ancak aynı sorunu çözmeye çalışırken benim için en çok kullanılan Google oldu!


Teşekkürler ! Bu bağlantıda değişkenlerin listesini gözden geçirebiliriz: wiki.nginx.org/HttpProxyModule#Variables
Edgard Leal

17

Takip etmeyi dene

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;
}

Ana bilgisayar adını koruduğu için bu çözüm benim için en iyi sonucu verdi.
Shafique Jamal

Temiz ve basit.
Ravshan Samandarov

7

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/;
    }
  }

Bu kod 8080'de dinler ve 1-36 hesaplamasındaki 8787 numaralı bağlantı noktasına yönlendirilir. Konumda başka bir yol seçebilirsiniz /

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.