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