sendfile
Директива `sendfile` включает или отключает использование системного вызова `sendfile()` для передачи файлов в ответ на запросы клиентов. — NGINX HTTP Core
Описание
Директива `sendfile` является частью основного HTTP-модуля NGINX и оптимизирует передачу файлов, позволяя серверу отправлять файлы непосредственно с диска в сетевое соединение без необходимости копирования данных между ядром и пользовательским пространством. Это приводит к повышению производительности и снижению загрузки CPU, особенно при отдаче статических файлов, таких как изображения, таблицы стилей или JavaScript-файлы. Эта директива принимает один аргумент — `on` или `off`. При установке в `on` NGINX будет использовать функцию `sendfile()` для передачи файлов клиенту, что особенно полезно при работе с большими файлами. Соответственно, установка в `off` отключает использование этой функциональности и возвращает к более традиционным методам отправки файлов, которые могут быть менее эффективными. Директиву `sendfile` можно включать в разных контекстах, таких как `http`, `server` и `location`, а также внутри директив `if` в контекстах location. Обратите внимание, что хотя включение `sendfile` обычно даёт лучшую производительность, важно убедиться, что конфигурация сервера и логика приложения корректно работают при использовании этой директивы, поскольку это может вызвать сложности в некоторых конфигурациях, например при работе с TLS или в отдельных сценариях логирования.
Пример конфига
http {
sendfile on;
server {
listen 80;
server_name example.com;
location / {
root /var/www/html;
index index.html;
}
}
}Использование `sendfile` с неблокирующим вводом-выводом может привести к неожиданному поведению из-за способа передачи данных.
Некоторые конфигурации, такие как проксирование или определённые модули (например, HTTP/2), могут некорректно взаимодействовать с `sendfile`, поэтому обязательно протестируйте производительность соответствующим образом.