Спасибо, такой вариант сработал. Максим, хотел бы в догонку задать вопрос не совсем связанный с предыдущим вопросом, но связанный с X-Accel-Redirect. На каком-то из форумов (возможно что здесь же, не помню точно) вы кому-то ответили, что только при переадресации на named location, запрос сохраняется неизменным (POST запрос остается POST запросом вместе с телом). А вот при переадресации на обычную location POST запросы становятся GET. С чем связано такое поведение? А именно, хочу понять, не является ли штука с named location каким-то "хаком", не очень желательным и который может исчезнуть в новых версиях.
Вообще, X-Accel-Redirect придумана для раздачи статики. Я использую ее для того чтобы разгрузить основной бекенд от запросов, в которых совершаются длительные HTTP-запросы к внешним ресурсам (длительных - это примерно секунд по 30). Поэтому возникла такая задача. Не является ли вообще такой подход bad design, или все-таки неверный инструмент для решения такой задачи? Maxim Dounin Wrote: ------------------------------------------------------- > Hello! > > On Fri, Jun 03, 2016 at 03:51:00AM -0400, materkov wrote: > > > Здравствуйте! > > > > Пытаюсь настроить X-Accel-Redirect. > > Вот такой конфиг: > > > > location /api { > > proxy_pass http://127.0.0.1:8000; > > } > > > > location @tornado { > > internal; > > Just a side note: директива "internal" в именованных location'ах > не нужна, иначе как в результате перенаправления в такой location > в любом случае не попасть. > > > proxy_set_header X-foo1 $upstream_http_myheader; > > proxy_set_header X-foo2 $upstream_status; > > proxy_pass http://127.0.0.1:8888; > > } > > > > Вот такой код в первом апстриме (Django): > > > > def app_hyper_report(request): > > r = api.Response() > > r['myheader'] = 10 > > r['X-Accel-Redirect'] = '@tornado' > > return r > > > > То есть здесь идет переадресация через X-Accel-Redirect на второй > апстрим. > > При этом, нужно передать во второй апстрим некоторые параметры. > Пытаюсь это > > сделать через headers. Столкнулся с проблемой: почему-то не работает > > передача headers через $upstream_http_myheader (в то время как > > $upstream_status срабатывает нормально). > > > > В чем здесь может быть проблема? > > Проблема в том, что в момент выполнения proxy_set_header уже > началась работа новым upstream'ом, и значения переменных > $upstream_http_* и $upstream_status - пустые. > > Решается сохранением нужных значений в промежуточные переменные с > помощью set, как-то так: > > location @tornado { > set $saved_myheader $upstream_http_myheader; > set $saved_status $upstream_status; > proxy_set_header X-foo1 $saved_myheader; > proxy_set_header X-foo2 $saved_status; > proxy_pass http://127.0.0.1:8888; > } > > -- > Maxim Dounin > http://nginx.org/ > > _______________________________________________ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru Posted at Nginx Forum: https://forum.nginx.org/read.php?21,267345,267372#msg-267372 _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru