<div dir="ltr">Спасибо большое за ответ.</div><div class="gmail_extra"><br><br><div class="gmail_quote">2 июля 2014 г., 13:54 пользователь Maxim Dounin <span dir="ltr"><<a href="mailto:mdounin@mdounin.ru" target="_blank">mdounin@mdounin.ru</a>></span> написал:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello!<br>
<div><div class="h5"><br>
On Wed, Jul 02, 2014 at 01:08:14PM +0400, Maksim Zavyalov wrote:<br>
<br>
> Привет. Такой вопрос: возможно ли сделать авторизацию пользователей в<br>
> зависимости от того, какие параметры были отправлены cgi-скрипту.<br>
><br>
> Как пример:<br>
><br>
> location / {<br>
><br>
>                 fastcgi_param QUERY_STRING $query_string;<br>
>                 fastcgi_param REQUEST_METHOD $request_method;<br>
>                 fastcgi_param REQUEST_URI $request_uri;<br>
>                 fastcgi_param SCRIPT_FILENAME $document_root/index.cgi;<br>
>                 if ($arg_p = "PATTERN")<br>
>                 {<br>
>                         auth_basic           "closed site";<br>
>                         auth_basic_user_file /path/to/user.pwd;<br>
>                 )<br>
>                 fastcgi_pass unix:/var/run/fcgiwrap.socket;<br>
>         }<br>
> В апаче это делалось выставлением переменной окруженя, которая проверялась<br>
> директивой<br>
> Deny from env={ENV_VARIABLE}<br>
><br>
> Возможно-ли что-то подобное в nginx, спасибо.<br>
<br>
</div></div>Директива auth_basic начиная с версии 1.3.10 понимает переменные,<br>
и если в результате получится специальное значение "off" - то<br>
проверок не будет.  Соответственно можно сделать как-то так:<br>
<br>
    location / {<br>
        set $realm "off";<br>
<br>
        if ($arg_p = "...") {<br>
            set $realm "closed site";<br>
        }<br>
<br>
        auth_basic $realm;<br>
        auth_basic_user_files /path/to/file;<br>
<br>
        ...<br>
    }<br>
<br>
Ну или тривиальный и работающий для произвольных директив метод -<br>
сделать rewrite в другой location, и там написать то, что нужно:<br>
<br>
    location / {<br>
        if ($arg_p = "...") {<br>
            rewrite (.*) /closed/$1 break;<br>
        }<br>
<br>
        ...<br>
    }<br>
<br>
    location /closed/ {<br>
        auth_basic "closed site";<br>
        auth_basic_user_files /path/to/file;<br>
<br>
        ...<br>
    }<br>
<br>
Следует, однако, понимать, что вообще подобные проверки<br>
аутентификации/авторизации по параметрам, вынесенные отдельно от<br>
кода, эти прараметры обрабатывающего, - они чреваты боком.  Потому<br>
как завтра выяснится, что ваш cgi-код понимате параметры,<br>
разделённые ";" (а не только "&", как nginx), и соответственно<br>
окажется, что авторизация - обходится тривиально.<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
Maxim Dounin<br>
<a href="http://nginx.org/" target="_blank">http://nginx.org/</a><br>
<br>
_______________________________________________<br>
nginx-ru mailing list<br>
<a href="mailto:nginx-ru@nginx.org">nginx-ru@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx-ru" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-ru</a></font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr">
<div><div>________________<br></div>С Уважением,<br></div>Максим Завьялов<br></div>
</div>