Различное поведение "location" и "proxy_pass" в nginx x-accel-redirect
У меня есть конфинтер nginx:
location ^~ /mount_points/mount_point1 {
internal;
alias /repos/mount_point_one;
}
location ^~ /to_proxy {
internal;
proxy_pass http://myproxy:5000;
}
Когда я запрашиваю http://localhost/mount_points/mount_point1/myfile.zip, я получаю "/repos/mount_point_one/myfile.zip", как и ожидалось.
При запросе " http://localhost/to_proxy/myfile2.html" я получаю " http://myproxy:5000/to_proxy/myfile2.html".
В первом случае часть "/mount_points/mount_point1" была удалена, а во втором случае часть "/ to_proxy" все еще там, я должен подделать адрес "/ to_proxy" на вышестоящем сервере, чтобы выяснить это.
Я что-то пропустил? Если мне просто нужно переписать URL, как я могу удалить проблему части "/ to_proxy" на вышестоящий сервер?
Спасибо.
1 ответ
proxy_pass
директива может выполнять функцию псевдонимов, но только если предоставляется дополнительный URI.
location ^~ /to_proxy/ {
internal;
proxy_pass http://myproxy:5000/;
}
Для правильного отображения псевдонимов необходимо использовать /
также добавляется к location
параметр.
Смотрите этот документ для деталей.
Если трейлинг /
на location
параметр вызывает проблемы, вы можете использовать rewrite ... break
вместо:
location ^~ /to_proxy {
internal;
rewrite ^/to_proxy(?:/(.*))?$ /$1 break;
proxy_pass http://myproxy:5000;
}