sendfile
Директива `sendfile` включает или отключает использование системного вызова `sendfile()` для передачи файлов в ответ на запросы клиентов.
Описание
Директива 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, поэтому обязательно протестируйте производительность соответствующим образом.