<div dir="ltr"><div>Здравствуйте.<br><br></div>Я установил nginx и модуль Максима Дунина (ngx_http_auth_request_module)<br><div><div><div>Настройку этого модуля производил по README от модуля.<br></div><div>Сам вебсервер собрал с такими параметрами в дебиане:<br>


<br>nginx version: nginx/1.3.14<br>built by gcc 4.4.5 (Debian 4.4.5-8)<br>TLS SNI support enabled<br>configure arguments: --with-openssl=/usr/build/openssl-1.0.1e --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-debug --with-http_flv_module --with-http_geoip_module --with-http_gzip_static_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-ipv6 --with-mail --with-mail_ssl_module --add-module=/usr/build/nginx-upstream-fair-master --with-http_spdy_module --add-module=/usr/build/ngx_http_auth_request_module<br>


</div><div><br></div><div>Предисловие для понимания возможности проявления архитектурной ошибки у меня.<br></div><div>Я разработал модуль авторизации по pin+token поверх google authenticator<br><a href="http://sourceforge.net/projects/simsim/" target="_blank">http://sourceforge.net/projects/simsim/</a><br>


</div><div>Он работает хорошо. Возвращает по локейшну /auth/ или 200 или 401 в разных случаях.<br></div><div>Алгоритм проекта прост.<br></div><div>1) Клиент приходит в локейшн /auth/ без кук или с просроченными/неверными и получает 401, предлагает перейти на /gauth/<br>

</div><div>2) /gauth/ выдаёт запрос basic auth на ввод данных. Данные обрабатывает моим модулем. Если пара пин-токен подходящая, то<br></div><div>клиенту выдаются куки и его редиректят на /auth/ снова.<br></div><div>3) /auth/ получает куки и возвращает 200.<br>

4) В последующие запросы браузер вставляет куки и прохождение /auth/ просиходит по их наличию без переходов на /gauth/<br></div><div>Проверка куки происходит совместно с обращением в редис, который их хранит..<br></div><div>

<br></div><div>Чтобы удалённо пользоваться своими проектами, я на фронте сделал reverse proxy средствами nginx.<br></div><div>
Запрос приходит на <a href="https://ssl.stremki.net/project_name/" target="_blank">https://ssl.stremki.net/project_name/</a><br></div>Пример обработки локейшна:<br><br>  location /nagios {<br>    auth_request            /auth/;<br>

    proxy_pass              <a href="http://192.168.125.47" target="_blank">http://192.168.125.47</a>;<br>
    proxy_buffering         on;<br>    proxy_set_header        SSL NO;<br>    proxy_set_header        Host $host;<br>    proxy_set_header        X-Real-IP $remote_addr;<br>    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;<br>


    proxy_read_timeout      1800;<br>    proxy_redirect          off;<br>  }<br><br></div><div>/auth/ локейшн описан по докумментации от Максима методом проксирования.<br></div><div>  location /auth/ {<br>    proxy_pass              <a href="http://192.168.125.35/auth/">http://192.168.125.35/auth/</a>;<br>
    proxy_pass_request_body off;<br>    proxy_buffering         off;<br>    proxy_cache             off;<br>    proxy_set_header        Content-Length "";<br>    proxy_set_header        Host 192.168.125.35;<br>  }<br>
<br>Я пытался делать без проксирования, указывая URI<br>
</div><div>auth_request <a href="http://192.168.125.35/auth/" target="_blank">http://192.168.125.35/auth/</a><br></div><div>Но это не работало и я в логах nginx видел ошибку<br>2013/11/01 23:31:51 [error] 10938#0: *245 "/usr/local/nginx/htmlhttp://<a href="http://192.168.125.35/auth/index.html">192.168.125.35/auth/index.html</a>" is not found (2: No such file or directory), client: 192.168.125.47, server: <a href="http://ssl.stremki.net">ssl.stremki.net</a>, request: "GET /mail/ HTTP/1.1", subrequest: "<a href="http://192.168.125.35/auth/">http://192.168.125.35/auth/</a>", host: "<a href="http://ssl.stremki.net">ssl.stremki.net</a>"<br>
<br></div><div>Было бы здорово, если бы я смог работать без проксирования /auth/.<br>
</div><div>Просто, пока не понял, как прописать внутренний бекенд для обработки и сейчас<br>пользуюсь локейшном /auth/ в режиме проксирования.<br></div><div><br></div><div><div>Для наджиоса всё работает отлично.<br></div>

<div>Однако, есть точно такие же локейшны для ownCloud и RoundCube<br><br></div><div>Во время захода на <a href="https://ssl.stremki.net/mail/" target="_blank">https://ssl.stremki.net/mail/</a><br></div><div>nginx обрабатывает auth_request<br>

</div><div>Поскольку, cookie достаточную для прохождения /auth/ я посылаю, то я получаю страницу логина в RoundCube.<br></div><div>Страница прогружается вся (все элементы: js скрипты, картинки).<br></div><div>Затем, когда я ввожу логин и пароль к RoundCube, браузер впадает в ожидание ответа от nginx<br>

</div><div>В tcpdump на бэкенде, отвечающем за /auth/ я не вижу запросов в этот момент.<br></div><div><br></div><div>Для дополнительного тестирования, я поставил на клиентскую часть Burp Proxy и пошагово прошёл весь процесс авторизации<br>

</div><div>От получения кук для /auth/ до попадания в вебинтерфейс уже самого ящика в RoundCube.<br></div><div>И был удивлён. Так, как Burp запрашивает разрешение на каждый шаг (каждый запрос), как дебаггер, то это даёт временные<br>

промежутки между запросами браузера к nginx.<br></div><div>Если браузер делает запросы не моментально, а через промежутки 1-2 секунды, то авторизация RoundCube отрабатывает и я <br></div><div>попадаю в почтовый ящик.<br>
</div>
<br></div><div>Я пока не очень хорошо знаю, как работает nginx во время проксирования вкупе с модулем Максима и предполагаю, что он<br>не делает запрос к бекенду, отвечающему за локейшн /auth/ при большом количестве запросов.<br>

</div><div><div>Возможно, я что-то не так настроил.<br><br></div><div>Помогите, пожалуйста, разобраться.<br></div><div>Спасибо.<br></div><div><br></div><div>-- <br><pre><br>(o_ - Dzmitry Stremkouski.<br>//\ - cel: <a href="tel:%2B7%20%28916%29%20090-85-68" value="+79160908568" target="_blank">+7 (916) 090-85-68</a><br>

V_/_- web: <a href="http://mitroko.com" target="_blank">http://mitroko.com</a><br>
</pre><br>
</div></div></div></div>