私がやりたいのは
誰かが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
です。
なにか提案を ?
ここでは繊細さが嫌いですが、以下のように9000の最後に/を追加してみます。転送されたリクエストに「ルート」を追加しなくなりました。
location /route {
proxy_pass http://127.0.0.1:9000/;
}
書き換えを使用して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が一番ヒットした問題でした。
以下をお試しください
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;
}
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にリダイレクトします。場所の他のパスを選択できます/