Два варианта, первое (и более корректное, так как не создает дополнительной нагрузки) - парсить логи nginx на сервере откуда отдается файл (ну или Apache, но кто будет статику отдавать через Apache)
Второе - используя магию mod_replace отправлять пользователя сначала на скрипт, который сделает свой учет, а потом уже отдаст ему файл.