Хитрый учет скачиваемых по прямым ссылкам файлов (nginx + piwik)
iprok
nginx-forum at nginx.us
Wed Apr 23 23:12:56 UTC 2014
Здравствуйте!
Есть сайт одной программы, на котором в частности выкладываются ее
дистрибутивы.
Пользователям они доступны следующими способами:
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