Nginx + X-Accel-Redirect
Maxim Dounin
mdounin на mdounin.ru
Пн Июн 6 13:24:39 UTC 2016
Hello!
On Sat, Jun 04, 2016 at 09:51:11AM -0400, materkov wrote:
> Максим, хотел бы в догонку задать вопрос не совсем связанный с предыдущим
> вопросом, но связанный с X-Accel-Redirect. На каком-то из форумов (возможно
> что здесь же, не помню точно) вы кому-то ответили, что только при
> переадресации на named location, запрос сохраняется неизменным (POST запрос
> остается POST запросом вместе с телом). А вот при переадресации на обычную
> location POST запросы становятся GET. С чем связано такое поведение? А
> именно, хочу понять, не является ли штука с named location каким-то "хаком",
> не очень желательным и который может исчезнуть в новых версиях.
Преобразование POST в GET при обычном перенаправлении связано с
тем, что обычное пренаправление штатно делается для того, чтобы
вернуть пользователю другой ресурс, доступный по другому адресу
методом GET. E.g., когда error_page делает перенаправление на
страницу /errors/404.html - к ней надо обращаться методом GET, и
другие методы тут неуместны.
Что касается именованных location'ов, то они в своё время были
придуманы как раз для того, чтобы избежать всех преобразований
запроса, и передать обработку к другой конфигурации, но без прочих
изменений. В частности, без изменений URI и метода запроса.
Отвечая на исходный вопрос: нет, такое поведение именованных
location'ов - это не хак, так и было задумано.
> Вообще, X-Accel-Redirect придумана для раздачи статики. Я использую ее для
> того чтобы разгрузить основной бекенд от запросов, в которых совершаются
> длительные HTTP-запросы к внешним ресурсам (длительных - это примерно секунд
> по 30). Поэтому возникла такая задача. Не является ли вообще такой подход
> bad design, или все-таки неверный инструмент для решения такой задачи?
Не вижу каких-либо проблем с таким подходом, по крайней мере со
стороны nginx'а.
--
Maxim Dounin
http://nginx.org/
Подробная информация о списке рассылки nginx-ru