Re: Как сделать auth request при SSI?
Maxim Dounin
mdounin на mdounin.ru
Вт Май 23 12:58:26 UTC 2017
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