Hello!
On Wed, Jun 14, 2017 at 05:53:39PM +0300, Никита wrote:
>
> Вот так не работает.
>
> location / {
> ssi off;
> include uwsgi_params;
> uwsgi_pass unix:/var/run/uwsgi/app/beta1/socket; ### вот этот бекенд создает этот хедер и отдает в ответ.
> uwsgi_param HTTP_X_ORIGINAL_URL $request_uri;
> uwsgi_connect_timeout 300;
> uwsgi_pass_header HTTP_X_FLAVOUR; ## пробовали подобное в разных вариациях
> uwsgi_pass_header UPSTREAM_HTTP_X_FLAVOUR; ## пробовали подобное в разных вариациях
> set $flavour $upstream_http_x_flavour; ## Расчитываем вот в этом месте завернуть хедер из ответа в переменную $flavour но судя по логу $upstream_http_X_Flavour пуст при том что в дебаг логе видно что бекенд его возвращает.
> }
> location ~ ^/_internal/redirect-mobile-website/(.*)$ {
> proxy_set_header Host $host;
> proxy_set_header X-Subdomain $x_subdomain;
> proxy_pass_header X-Flavour;
> proxy_set_header X-Flavour $flavour; ### А вот тут передать ее в подзапрос.
> proxy_pass http://consul-frontend-mobile-website--beta1/$1$is_args$args;
> }
Вы неправильно понимаете, как работают директивы в nginx'е.
Директивы не выполняются последовательно, они задают конфигурацию
для кокретного location'а. Соответственно, директива set
внутри "location /" будут выполнена на этапе поиска конфигурации,
до отправки запроса на бекенд. Подробнее о том, как выполняются
директивы модуля rewrite, можно почитать в документации,
http://nginx.org/ru/docs/http/ngx_http_rewrite_module.html.
Чтобы сохранилось значение, полученное от бекенда, надо
использовать директиву set уже после перенаправления, в том же
location'е, где вы собираетесь это значение использовать в
proxy_set_header, что и было показано в приведённом ранее примере.
Тот же пример, слегка расширенный, чтобы исключить
неоднозначность:
location / {
proxy_pass http://backend-to-return-redirect;
...
}
location /redirected/ {
set $foo $upstream_http_x_flavour;
proxy_pass http://...;
proxy_set_header X-Flavour $upstream_http_x_flavour;
...
}
--
Maxim Dounin
http://nginx.org/
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru