|
|
Опубликовано 07.11.2018 10:05:15
|
|
|

BBS или сайты часто имеют только у вас разрешение просматривать эту страницу или скачать этот ресурс. Несколько дней назад я посетил сервер nginx, как реализовать этот контроль файлов, используя x-sendfile.
1. Что такое X-Sendfile?
X-Sendfile — это механизм, который передаёт запросы на загрузку файлов от бэкенд-приложения на фронтенд-веб-сервер для обработки, что может значительно повысить эффективность сервера, снимая нагрузку на бэкенд-программу читать и обрабатывать файл для обработки отправки, особенно при больших загрузках файлов.
X-Sendfile реализуется через конкретный HTTP-заголовок: указание адреса файла в заголовке X-Sendfile для рекламы на фронтенд-веб-сервере. Когда веб-сервер обнаруживает этот заголовок, отправленный бэкендом, он игнорирует другие выводы бэкенда и использует собственные компоненты (включая оптимизации, такие как заголовки кэша и повторное подключение по точкам остановки) для отправки файла пользователю.
Однако перед использованием X-Sendfile важно понимать, что это не стандартная функция и по умолчанию отключена большинством веб-серверов. Разные веб-серверы имеют разные реализации, включая разные форматы заголовков X-Sendfile. В случае неправильной настройки пользователи могут скачать файл размером 0 байт.
Использование X-Sendfile позволит скачивать файлы в невеб-каталогах (например, /root/), даже если файл отключён под защитой .htaccess.
Разные веб-серверы реализуют разные HTTP-заголовки
Заголовок SENDFILE | Используемый веб-сервер | | X-Sendfile | Apache, Lighttpd v1.5, Cherokee | | X-LIGHTTPD-send-file | Lighttpd v1.4 | | X-Accel-Redirect | Нгинкс, чероки |
Недостаток использования X-SendFile в том, что вы теряете контроль над механизмом передачи файлов. Например, если вы хотите выполнить определённые действия после загрузки файла, например, позволить пользователю скачать файл только один раз, этот X-Sendfile не сможет этого сделать, потому что php-скрипт в фоне не знает, успешная ли загрузка.
2. Как использовать NGINX?
Nginx поддерживает эту функцию по умолчанию и не требует загрузки дополнительных модулей. Просто реализация немного отличается, и HTTP-заголовок, который нужно отправлять, называется X-Accel-Redirect. Кроме того, в конфигурационном файле необходимо сделать следующие настройки
внутренний означает, что доступ к этому пути возможен только внутри Nginx и не может быть доступен напрямую браузером для предотвращения несанкционированных загрузок.
3. Как пользоваться PHP-программами?
Если добавить заголовок X-Accel-Redirect, пользователь скачает файл по пути /game. Наш контроль прав на файл реализован.
Официальное введение в документацию:Вход по гиперссылке виден.
|
Предыдущий:Любовь, брак и семья, первая половина месяца + 18 июняСледующий:Муковисцидоз — это первый взгляд на всю сеть, который самостоятельно прицеливается и стабилизируется в течение одного месяца
|