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