<div dir="ltr">Максим, спасибо огромное за подсказку с satisfy.<div>Гораздо удобнее геомапинга.</div><div><br></div><div>Я немного поэкспериментировал и выяснил, что nginx подвисает в подзапросе, если прилетает POST запрос.</div>
<div>Я вставил следующее правило:</div><div><div> location /auth {</div><div> if ( $request_method = POST ) { return 200; }</div></div><div><br></div><div>И все приложения заработали, как положено. Бэкенд отлично справляется с нагрузкой, дело не в нём.</div>
<div>Видимо, когда приходит запрос на .<a href="https://ssl.stremki.net/project_name">https://ssl.stremki.net/project_name</a> методом POST, то ngx_http_auth_request_module </div><div>хочет сделать подзапрос таким же методом.</div>
<div><br></div><div>Но, мало того, что он хочет это сделать, он зачем-то добавляет знак ? в конец локейшна /auth (это видно в дебаглоге)</div><div>На стороне бэкенда в этот момент не видно никакого трафика от nginx.</div>
<div>Тоесть, как только прилетает POST с данными на любой локейшн, который проверяется вашим модулем, nginx строит подзапрос с методом POST, добавляет символ ? и не делает подзапрос к бэкенду.</div><div><br></div><div>Простите, если запутал.</div>
<div><br></div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/11/5 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 Tue, Nov 05, 2013 at 02:40:17PM +0400, Dzmitry Stremkouski wrote:<br>
<br>
> Максим, спасибо за ваш ответ.<br>
> Я попробовал сделать апгрейд nginx по вашему замечанию, чтобы сузить<br>
> область поиска ошибки.<br>
><br>
> На данный момент у меня сборка следующая:<br>
> nginx version: nginx/1.5.6<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<br>
> --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log<br>
> --http-client-body-temp-path=/var/lib/nginx/body<br>
> --http-fastcgi-temp-path=/var/lib/nginx/fastcgi<br>
> --http-log-path=/var/log/nginx/access.log<br>
> --http-proxy-temp-path=/var/lib/nginx/proxy<br>
> --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-debug<br>
> --with-http_flv_module --with-http_geoip_module<br>
> --with-http_gzip_static_module --with-http_realip_module<br>
> --with-http_stub_status_module --with-http_ssl_module<br>
> --with-http_sub_module --with-mail --with-mail_ssl_module<br>
> --add-module=/usr/build/nginx-upstream-fair-master --with-http_spdy_module<br>
> --with-http_auth_request_module<br>
><br>
> Все симптомы остались прежними.<br>
> CGI скрипты нагиоса работают через такую связку отлично, как и ранее.<br>
> однако, другие приложения (owncloud, roundcube) требуют "медленного"<br>
> прохода.<br>
> Ещё сделал различие, что нагиос работает везде GET запросами, в то время,<br>
> как owncloud, jenkins, roundcube делают периодически POST<br>
> Возможно, это неверно как-то обрабатывается.<br>
><br>
> Дополнительно, я попытался смягчить условия для мониторинга, прописал в<br>
> http секцию<br>
><br>
> geo $ip_range {<br>
> default 0;<br>
> <a href="http://192.168.125.0/24" target="_blank">192.168.125.0/24</a> 1;<br>
> }<br>
><br>
> и в секциях server/location<br>
><br>
> set $auth_location /auth/;<br>
> if ( $ip_range = 1 ) {<br>
> set $auth_location /always_ok;<br>
> }<br>
><br>
> location = /always_ok {<br>
> return 200;<br>
> }<br>
><br>
> location /jenkins {<br>
> auth_request $auth_location;<br>
> proxy_pass <a href="http://192.168.125.37:8080" target="_blank">http://192.168.125.37:8080</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>
> }<br>
><br>
> такая связка не работает.<br>
> Ошибка в логе всё та же. auth_request зачем-то ищет файл $auth_location а<br>
> не делает подзапрос в локейшн возращаемый переменной.<br>
><br>
> 2013/11/05 13:17:13 [error] 32126#0: *1243 open()<br>
> "/usr/local/nginx/html$auth_location" failed (2: No such file or<br>
> directory), client: 185.6.244.255, server: <a href="http://ssl.stremki.net" target="_blank">ssl.stremki.net</a>, request: "GET<br>
> /jenkins/login?from=%2Fjenkins%2F HTTP/1.1", subrequest: "$auth_location",<br>
> host: "<a href="http://ssl.stremki.net" target="_blank">ssl.stremki.net</a>", referrer: "<a href="https://ssl.stremki.net/jenkins/" target="_blank">https://ssl.stremki.net/jenkins/</a>"<br>
> 2013/11/05 13:17:13 [error] 32126#0: *1243 auth request unexpected status:<br>
> 404, client: 185.6.244.255, server: <a href="http://ssl.stremki.net" target="_blank">ssl.stremki.net</a>, request: "GET<br>
> /jenkins/login?from=%2Fjenkins%2F HTTP/1.1", host: "<a href="http://ssl.stremki.net" target="_blank">ssl.stremki.net</a>",<br>
> referrer: "<a href="https://ssl.stremki.net/jenkins/" target="_blank">https://ssl.stremki.net/jenkins/</a>"<br>
><br>
> Я включил дебаг для своего адреса. Вот, его вывод.<br>
> <a href="http://pastebin.com/aKDG4gYk" target="_blank">http://pastebin.com/aKDG4gYk</a><br>
<br>
</div></div>Директива auth_request не понимает переменных, и ваша конфигурация<br>
ожидаемо пытается обратиться к файлу, которого не существует.<br>
<br>
Правильное решение исходной задачи "разрешить свою сеть, для<br>
остальных - требовать авторизацию" - написать что-нибудь вроде:<br>
<br>
location / {<br>
satisfy any;<br>
<br>
auth_request /auth;<br>
<br>
allow <a href="http://192.168.125.0/24" target="_blank">192.168.125.0/24</a>;<br>
deny all;<br>
<br>
...<br>
}<br>
<br>
<a href="http://nginx.org/r/satisfy" target="_blank">http://nginx.org/r/satisfy</a><br>
<br>
Что конкретно у вас происходит в случае, когда конфигурация<br>
работоспособна и помогает "замедление" - надо смотреть, но скорее<br>
всего просто авторизационный бекенд не справляется с нагрузкой.<br>
<div class="HOEnZb"><div class="h5"><br>
--<br>
Maxim Dounin<br>
<a href="http://nginx.org/en/donation.html" target="_blank">http://nginx.org/en/donation.html</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></div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><pre><br>(o_ - Dzmitry Stremkouski.<br>
//\ - cel: +7 (916) 090-85-68<br>V_/_- web: <a href="http://mitroko.com">http://mitroko.com</a><br></pre><br>
</div>