Nginx/php - фиксация скачиваний через X-Accel-Redirect


Пишу эту короткую заметку в очень сокращенном виде - чтоб самому не забыть. В
интернете таких решений много. Наша задача: фиксировать скачивания файлов по адресу 
/download/file.zip, причем так, чтобы конечному пользователю это было незаметно.

В nginx для этой цели есть специальный механизм, который условно можно назвать 
"internel-redirect" (внутреннее перенаправление). Смысл состоит в том, что некоторый 
каталог специальным образом отмечается в конфиге, и редирект с помощью заголовка X-
Accel-Redirect на этот каталог рассматривается сервером, как внутренний и невидимый для 
пользователя.

Измененная часть конфига nginx:

location / {
   rewrite ^/download/(.*) /download.php?q=$1 last;
}

# Специальный внутренний каталог с файлами
location /files {
   root /home/host/www;
   internal;
}

Дальше в корне сайта делаем каталог /files/, в котором храним раздаваемые файлы и 
используем скрипт /download.php для раздачи:

$path = $_GET["q"];
$file = dirname(__FILE__).'/files/'.$path;
if (file_exists($file)) {
   header("Content-type: ".mime_content_type($file));
   header("Content-length: ".filesize($file));
   header("X-Accel-Redirect: /files/" . $path);
}

Вот и всё!