Назад | Перейти на главную страницу

Как остановить автоматическое перенаправление 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;
        }
}

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

Если местоположение определяется строкой префикса, которая заканчивается символом косой черты, и запросы обрабатываются одним из 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)