Пишу эту короткую заметку в очень сокращенном виде - чтоб самому не забыть. В интернете таких решений много. Наша задача: фиксировать скачивания файлов по адресу /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); } Вот и всё!
Linux/Windows Справочник v0.05 © 2007-2024 Igor Salnikov aka SunDoctor