На основе заголовка X-Accel-Redirect и директивы internal в nginx можно реализовать любую логику по ограничению доступа. И в отличии от отдачи файла непосредственно php-скриптом, этот вариант намного эффективней, т.к. php-скрипт только проверку доступа будет делать, а отдачей уже займется nginx.
Пример использования: www.opennet.ru/base/net/nginx_x_accel_redirect.txt.html
Не давайте пользователю прямую ссылку на файл, а давайте ему ссылку на PHP-скрипт, который в зависимости от случая будет САМ выдавать файл, а не перенаправлять пользователя куда-либо.