Как писал Тайсон, ваш лучший выбор (если вы имеете полный контроль над сервером) - проверять учетные данные пользователя и перенаправлять его (временное перенаправление 302) на URL-адрес, по которому он может загрузить файл.
Для предотвращения повторного использования этих URL-адресов мы используем Lighttpd и его mod_secdownload , который позволяет генерировать хэш, действительный в течение указанного периода времени.
nginx имеет X-Accel-Redirect , а Apache имеет mod_xsendfile .
Если вы решили внедрить отдельный облегченный веб-сервер, есть и другие преимущества (в основном, снижение потребления памяти при обслуживании статических файлов и более быстрое время отклика).
Если вы решите пойти по этому пути, вам придется либо добавить другой IP-адрес на сервер и привязать Apache только к одному IP-адресу, а другой сервер (lighty of nginx) - к другому, поскольку они являются веб-серверами. оба слушают порт 80. И смена порта для одного из серверов не очень хорошая идея, потому что многие люди не имеют доступа к портам более высокого уровня.
Если добавление другого IP-адреса невозможно, вы можете установить nginx на порт 80 и использовать его в качестве обратного прокси-сервера для передачи динамических запросов в Apache, который может прослушивать другой порт и обслуживать все статические файлы.