web-dev-qa-db-ja.com

末尾のスラッシュがURIにない場合にnginx 301自動リダイレクトを停止するにはどうすればよいですか?

ブラウザでfoobar.com/testを試すたびに、nginxはクライアントをfoobar.com/test/にリダイレクト(301)しているようです。この動作は許容できません。プロキシされたサーバーは、リモートApache Webサーバーです。私は(プロキシなしで)Apacheサーバーを直接呼び出してみましたが、クライアントをリダイレクトしません。

以下のnginxサーバー構成を考慮して、これをどのように解決すればよいですか?

server {
        listen 80;
        server_name fooBar.com;

        location /test {
                proxy_redirect off;
                proxy_pass http://1.1.1.1:80/;
                proxy_set_header Host $http_Host;
                proxy_set_header X-Forwarded-Host $http_Host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
        }


        location /test/ {
                proxy_redirect off;
                proxy_pass http://1.1.1.1:80/;
                proxy_set_header Host $http_Host;
                proxy_set_header X-Forwarded-Host $http_Host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
        }
}
6
Geo C.

ドキュメントに従って、このシナリオには特別な種類の処理があります。

場所がスラッシュ文字で終わるプレフィックス文字列によって定義され、リクエストがproxy_pass、fastcgi_pass、uwsgi_pass、scgi_pass、またはmemcached_pa​​ssのいずれかによって処理される場合、特別な処理が実行されます。 URIがこの文字列と等しいが末尾のスラッシュがないリクエストに応答して、コード301の永続的なリダイレクトが、スラッシュが追加されたリクエストされたURIに返されます。これが望ましくない場合は、URIと場所の完全一致を次のように定義できます。

location /user/ {
    proxy_pass http://user.example.com;
}

location = /user {
    proxy_pass http://login.example.com;
}

http://nginx.org/en/docs/http/ngx_http_core_module.html#location

11
famousgarkin