Привет всем!<br>Игорь, я тут придумал такую штучку...<br>подсчет трафика и вывод его для каждого server {} или location {}.<br>Идея в том, чтобы ввести переменную, которую можно было бы вставить в необходимый server {} или location {}, а потом выводить эту статистику через /nginx_status
<br>Это удобно тем, что позволяет динамически считать и наблюдать трафик от отдельной директории. Особенно интересно это там, где нет ведения логов: в картинках и файлах.<br>И не надо динамически логи парсить. <br>Что-то типа из формата логов $bytes_sent, только постоянно ссумируется (до обнуления).
<br>Что-то типа подобного:<br><br><span style="font-style: italic;"> location / {</span><br style="font-style: italic;"><span style="font-style: italic;"> proxy_pass <a href="http://111.111.111.111:8000/" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
http://111.111.111.111:8000/</a>;</span><br style="font-style: italic;"><span style="font-style: italic;"> access_log /usr/local/nginx/logs/access_web.log main;</span><br style="font-style: italic;"><span style="font-style: italic;">
proxy_redirect off;</span><br style="font-style: italic;"><span style="font-style: italic;"> proxy_set_header Host $host;</span><br style="font-style: italic;"><span style="font-style: italic;">
proxy_set_header X-Real-IP $remote_addr;</span><br style="font-style: italic;"><span style="font-style: italic;"> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</span><br style="font-style: italic;">
<span style="font-weight: bold; font-style: italic;"> traffic_count $location[1] "Main directory"</span><br style="font-style: italic;"><span style="font-style: italic;"> }</span><br style="font-style: italic;">
<br style="font-style: italic;"><span style="font-style: italic;"> location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|swf|zip|rar|doc|xls|exe|pdf|ppt|txt|bmp|js)$ {</span><br style="font-style: italic;"><span style="font-style: italic;">
root /srv/www/htdocs/web1/html/obs;</span><br style="font-style: italic;"><span style="font-style: italic;"> access_log off;</span><br style="font-style: italic;"><span style="font-style: italic;"> expires 30d;
</span><br style="font-style: italic;"><span style="font-weight: bold; font-style: italic;"> traffic_count $location[2] "Files"</span><br style="font-style: italic;"><span style="font-style: italic;"> }
</span><br style="font-style: italic;"><br style="font-style: italic;"><span style="font-style: italic;"> location ^~ /swf/ {</span><br style="font-style: italic;"><span style="font-style: italic;"> valid_referers none server_names *.server.com/;
</span><br style="font-style: italic;"><span style="font-style: italic;"> if ($invalid_referer) {</span><br style="font-style: italic;"><span style="font-style: italic;"> return 403; }</span>
<br style="font-style: italic;"><span style="font-style: italic;"> root /srv/www/htdocs/web/html;</span><br style="font-style: italic;"><span style="font-style: italic;"> autoindex on;</span><br style="font-style: italic;">
<span style="font-weight: bold; font-style: italic;"> traffic_count $location[3] "SWF files"</span><br style="font-style: italic;"><span style="font-style: italic;"> access_log /usr/local/nginx/logs/access_web_swffiles.log download;
</span><br style="font-style: italic;"><span style="font-style: italic;"> }</span><br><br><br><br>Для обнуления можно ввести глобальную переменную с форматом наподобие крона (минимальный интервал обнуления сделать не минуту, а час)
<br> час день месяц<br><span style="font-weight: bold; font-style: italic;"> traffic_count_zero */3 * *</span><br>обнуление каждые три часа<br><br><br>В статистике это выгладит примерно так (в байтах):
<br><br style="font-style: italic;"><span style="font-style: italic;">croesus:~# GET <a href="http://your-domain.com/nginx_status" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://your-domain.com/nginx_status
</a></span><br style="font-style: italic;"><span style="font-style: italic;">
Active connections: 1492</span><br style="font-style: italic;"><span style="font-style: italic;">server accepts handled requests</span><br style="font-style: italic;"><span style="font-style: italic;"> 2124355 2124355 8278635
</span><br style="font-style: italic;"><span style="font-style: italic;">Reading: 6 Writing: 405 Waiting: 1081</span><br style="font-style: italic;"><span style="font-style: italic; font-weight: bold;">Main directory: 111111
</span><br style="font-style: italic; font-weight: bold;"><span style="font-style: italic; font-weight: bold;">Files: 2223334</span><br style="font-style: italic; font-weight: bold;"><span style="font-style: italic; font-weight: bold;">
SWF files: 8888888</span><br><br><br>Или просто имена переменных выдавать, а там пусть сами разбираются<br><br><span style="font-style: italic;">croesus:~# GET <a href="http://your-domain.com/nginx_status" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
http://your-domain.com/nginx_status
</a></span><br style="font-style: italic;"><span style="font-style: italic;">Active connections: 1492</span><br style="font-style: italic;"><span style="font-style: italic;">server accepts handled requests</span><br style="font-style: italic;">
<span style="font-style: italic;"> 2124355 2124355 8278635</span><br style="font-style: italic;"><span style="font-style: italic;">Reading: 6 Writing: 405 Waiting: 1081</span><br style="font-style: italic;"><span style="font-style: italic; font-weight: bold;">
location[1]: 111111</span><br style="font-style: italic; font-weight: bold;"><span style="font-style: italic; font-weight: bold;">location[2]: 2223334</span><br style="font-style: italic; font-weight: bold;"><span style="font-style: italic; font-weight: bold;">
location[3]: 8888888</span><br style="font-style: italic;"><br>Еще это интересно там, где одновременно отдается "легкая" графика сайта и огромные файлы-архивы или видеофайлы, так как они качаются долго и в логи попадают не равномерно по времени.
<br><br>Думаю это будет элегантным решением ;)<br><br>Что скажете?<br>