Каждый раз, когда я пробую 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)