Как остановить автоматическое перенаправление nginx 301, если в URI нет конечной косой черты?

Каждый раз, когда я пробую foobar.com/test в браузере, кажется, что nginx перенаправляет (301) клиента на foobar.com/test/. Такое поведение недопустимо. Прокси-сервер - это удаленный веб-сервер Apache. Я пробовал прямые звонки на сервер 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
задан 20 January 2017 в 11:50
1 ответ

В соответствии с документами для этого сценария существует особый вид обработки:

Если местоположение определяется строкой префикса, которая заканчивается символом косой черты, и запросы обрабатываются один из proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass или memcached_pass, затем выполняется специальная обработка. В ответ на запрос с 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 )

10
ответ дан 3 December 2019 в 00:15

Теги

Похожие вопросы