Hello!

On Mon, May 22, 2017 at 08:23:27PM -0400, BorisK2 wrote:

> Maxim Dounin Wrote:
> -------------------------------------------------------
> > Если хочется какие-то ssi-фрагменты показывать в зависимости от 
> > результата auth_request, то следует использовать auth_request для 
> > основного запроса, и вернуть положительный результат, параллельно 
> > установив дополнительную переменную через auth_request_set.  После 
> > чего проверять переменную с помощью, например, SSI-команды "if".  
> 
> Спасибо за совет!
> Не получается установить переменную:  auth_request_set $x_allow_test2
> $upstream_http_x_allow_test2;
> Она всегда пустая. auth_request_set $server $upstream_http_server; тоже
> пустая.
> 
> Нашел аналогичный вопрос
> https://forum.nginx.org/read.php?2,233582,233586#msg-233586 , но так и не
> понял, как исправить Mistake #1.
> 
> Конфиг:
>       ssi on;
> 
>       location = /test1.html {
>               auth_request /test_auth;
>               auth_request_set $x_allow_test2 $upstream_http_x_allow_test2;
>       }
> 
>       location = /test2.html {
>       }
> 
>       location = /test_auth {
>               add_header X-Allow-Test2 1;
>               return 200;
>       }
> 
> 
> test1.html:
> test1
> <!--# if expr="$x_allow_test2 = 1" -->
>       <!--# include file="/test2.html" -->
> <!--# endif -->

Вы пытаетесь использовать переменную $upstream_http_x_allow_test2.  
Однако переменные $upstream_http_* отражают заголовки, полученные 
от бекенда при проксировании (http://nginx.org/r/$upstream_http_/ru).  
У вас же проксирование не используется, и переменная ожидаемо 
пустая.

Если речь идёт о том, чтобы поставить переменную в рамках 
подзапроса непосредственно из конфига nginx'а, то вместо 
auth_request_set просто сделайте set, как-то так:

    location = /test_auth {
        set $x_allow_test2 1;
        return 200;
    }

Пространство переменных у запросов и подзапроса - общее, так что 
установленная в подзапросе переменная будет доступна в основном 
запросе.  Директива auth_request_set нужна тогда, когда речь идёт 
про специальные переменные, такие как $upstream_http_*, которые 
могут иметь различные значения в зависимости от того, где именно к 
ним обращаются.

-- 
Maxim Dounin
http://nginx.org/
_______________________________________________
nginx-ru mailing list
[email protected]
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Ответить