ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Хитрый учет скачиваемых по прямым ссылкам файлов (nginx + piwik)


  • To: "nginx-ru@xxxxxxxxx" <nginx-ru@xxxxxxxxx>
  • Subject: Re: Хитрый учет скачиваемых по прямым ссылкам файлов (nginx + piwik)
  • From: Илья Шипицин <chipitsine@xxxxxxxxx>
  • Date: Thu, 24 Apr 2014 11:06:45 +0600
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; bh=9DO6wT3/ZjH9bQREWbDicg0/z5JR/xAL8xaLcY9PWkk=; b=oFYW09jCcmZdNJVE8H3iy2nubdzM8h6mx5V92py39ROUYlWSNefnjKEJByOncCkR+F msRtOuuXEUrLe2NJsdMmQHcH0lFLHdT4ISD7W7FW0dmlaWGW5I25HfpR7eMRw5rDBzm9 BwPeM3uHOA7FJCvPBb7mIGVgyD0bAcGlUrR+c0HZu+MJG78v3wcqpdaEylpxto/XqrwL KRslaJE3p6xiNqNwJN/uqZ6wVjSzwos2/bSyUu33fwQo6ZOQV4nySe45b8vrikuk8V4H FVMzzzPRrQsAQ0OfB2MIaRkoZAx5gRZC3iV47lvK1F/5eybRR5YqWUBbOh2ZkjUmBHgn MGzw==
  • In-reply-to: <0d3289a88e4d7134d393eeff37d84c47.NginxMailingListRussian@forum.nginx.org>
  • References: <0d3289a88e4d7134d393eeff37d84c47.NginxMailingListRussian@forum.nginx.org>

можно через Lua снимать статистику (модуль сторонний, использовать его
или нет, решайте сами)

а) объявляем область памяти

    lua_shared_dict count 10M;

б) через log_by_lua делаем счетчик

            log_by_lua '
                local newval, err =
ngx.shared.count:incr(ngx.var.upstream_addr, 1)
                if not newval and err == "not found" then
                ngx.shared.count:add(ngx.var.upstream_addr, 1)
                end
            ';

}



в) через отдельный location отдаем собранную статистику

location /status {
    default_type 'text/html';


            content_by_lua '
                ngx.say("key xxx: ", ngx.shared.count:get("xxxx"))
            ';

}

по вкусу можно добавить timestamp (потому что shared memory обнулится
при рестарте). в примере ключом является upstream_addr (мы считали
обращения к бекендам при балансировке по least_conn), вам, наверное,
надо переделать на путь до файла


24 апреля 2014 г., 5:12 пользователь iprok <nginx-forum@xxxxxxxx> написал:
> Здравствуйте!
>
> Есть сайт одной программы, на котором в частности выкладываются ее
> дистрибутивы.
> Пользователям они доступны следующими способами:
> 1) По ссылкам со страницы sitename.org/downloads/ (редактируемая авторами
> сайта html с ссылками)
> 2) Путем просмотра sitename.org/files (список файлов и папок автоматически
> генерируемый через fancyindex)
> 3) Прямые ссылки извне.
>
> Стоит задача учитывать скачивания файлов по всем трем ссылкам. Парсинг логов
> не подходит (используется piwik, а он через логи сильно меньше инфы
> получает). Поэтому выбрал способ через php скрипт с x-accel-redirect. При
> этом скачивания через пункт 1 учитываются из коробки, так что они должны
> быть исключены, чтобы избежать дублей.
>
> Посмотрите, пожалуйста, вырезку из конфигов. files.down - символическая
> ссылка на files (без этого был циклический редирект. Можно ли без нее?). Все
> ли я правильно сделал?
>
> nginx.conf:
> http {
> ...
> map $http_referer $direct_download {
>         default 1;
>         ~*sitename.org/files/.* 1;
>         ~*://sitename.org 0;
> }
> ...
> server {
> ...
> root /var/www/sitename.org/htdocs;
> ...
> location /files/ {
>                 location ~* /.*?[^/]$ { #Обрабатывает все файлы, но не
> директории, листинг которых через fancyindex (на конце uri не должен быть /
> )
>                         if ($direct_download) {
>                                 rewrite ^/files/(.*) /down.php?path=$1
> last;
>                         }
>                 }
> root /var/www/sitename.org/;
>
>                 fancyindex on;
>                 fancyindex_exact_size off;
>
>                 aio            on;
>                 directio       512;
>                 output_buffers 1 128k;
> }
> location /files.down/ {
>                 root /var/www/sitename.org/;
>
>                 aio            on;
>                 directio       512;
>                 output_buffers 1 128k;
>                 internal;
> }
>
> }}
>
> ну и down.php:
>
> <?php
> ...
> // And redirect user to internal location
> header("Content-Type: application/octet-stream");
> header("X-Accel-Redirect: /files.down/" . $path);
> ?>
>
> Заранее спасибо всем откликнувшимся.
>
> Posted at Nginx Forum: 
> http://forum.nginx.org/read.php?21,249507,249507#msg-249507
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru@xxxxxxxxx
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.