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