場所があります
location /pass/ {
proxy_pass http://localhost:12345/;
}
http://example.com/pass/whatever
つまり、URLをプロキシ化するはずですhttp://localhost:12345/whatever
気に入らないのは、nginxが自動的にスラッシュを追加することです
http://example.com/pass
http://example.com/pass/
301リダイレクト経由で
この動作を簡単に回避するにはどうすればよいでしょうか。/pass
末尾のスラッシュなしで別の場所に移動したいです。よろしくお願いします。
答え1
で終わるproxy_pass
がバックエンドに移動せずに自動的に暗黙的にリダイレクトされる特殊なケースがあります。これを回避するには、末尾のスラッシュなしで明示的に を作成する必要があります。location
/
301
location
場所がスラッシュ文字で終わるプレフィックス文字列で定義され、リクエストが proxy_pass、fastcgi_pass、uwsgi_pass、scgi_pass、memcached_pass、または grpc_pass のいずれかで処理される場合、特別な処理が実行されます。この文字列に等しいが末尾のスラッシュがない URI を持つリクエストに応答して、スラッシュが追加されたリクエストされた URI にコード 301 の永続的なリダイレクトが返されます。これが望ましくない場合は、次のように URI と場所の完全一致を定義できます。
location /user/ { proxy_pass http://user.example.com; } location = /user { proxy_pass http://login.example.com; }
/pass
location
たとえば、既存のものに加えて明示的に作成する必要があります。/pass/
そうしないと、暗黙のものlocation /pass {return 301 /pass/…;}
が作成されます。
/pass
しかし、本当に自分がしようとしていることをやりたいのでしょうか?からへのリダイレクトを省略する場合/pass/
、相対パスは機能しません。また、新しいブラウザの中には、末尾のスラッシュがユーザーに表示されない欠陥のある UI/UX を備えているものもあり、その違いをトラブルシューティングしようとすると、さらに混乱を招く可能性があります。
答え2
あなたが望むように別の場所自然な解決策は、その場所を追加することです
location /pass {
}
デフォルトでは、nginx は Web ルートで「pass」というファイルを探します。このデフォルトが気に入らない場合は、この新しい location ブロック内にさらにディレクティブを追加して、これを実現できます。
他にも使える
location = /pass {
}
nginx が一致を少し速く見つけられるようにします。