web-dev-qa-db-ja.com

Nginx:httpリクエストを別のポートに転送するにはどうすればよいですか?

私がやりたいのは

誰かがhttp://localhost/route/abcにアクセスしたときのサーバーの応答はhttp://localhost:9000/abcとまったく同じです

今私はこのように私のNginxを設定します:

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

HTTPリクエストはポート9000に正しくディスパッチされますが、受信したパスはhttp://localhost:9000/route/abcではなくhttp://localhost:9000/abcです。

なにか提案を ?

76
WoooHaaaa

ここでは繊細さが嫌いですが、以下のように9000の最後に/を追加してみます。転送されたリクエストに「ルート」を追加しなくなりました。

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

書き換えを使用してURLの余分な部分を削除できると思います。あなたの場合、私はあなたが使うことができると思います:

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

ただし、アプリに内部リンクが含まれている場合でも内部リンクは/ abc/fooを指している可能性があり、これを行う場合は、未加工のリクエストが正しく受信されるように、/ route/abc/fooを指す必要があります。 nginxの設定をそのままにしておき、可能であれば、サブディレクトリにあることに気づくようにアプリを設定する方がよいでしょう。

これは古い質問であることは承知していますが、同じ問題を解決しようとしたときに、Googleが一番ヒットした問題でした。

41
user2428107

以下をお試しください

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

このコードは8080をリッスンし、compute-1-36のポート8787にリダイレクトします。場所の他のパスを選択できます/

7
user3266656