sendfile
指令 `sendfile` 用于启用或禁用在响应客户端请求时使用 `sendfile()` 系统调用来传输文件。 — NGINX HTTP Core
sendfile
httpserverlocationif in location
语法sendfile on | off;
默认值off
上下文http, server, location, if in location
模块NGINX HTTP Core
参数flag
说明
指令 `sendfile` 是 NGINX HTTP 核心模块的一部分,通过允许服务器直接从磁盘向网络连接发送文件而无需在内核和用户空间之间复制数据,从而优化了文件传输。这会提高性能并降低 CPU 使用率,尤其是在提供诸如图片、样式表或 JavaScript 等静态文件时。 该指令接受一个参数,其值可以是 `on` 或 `off`。当设置为 `on` 时,NGINX 将使用 `sendfile()` 函数向客户端输出文件,这在处理大文件时尤其有利。相反,设置为 `off` 会禁用此功能,改为依赖传统的文件发送方法,这些方法可能效率较低。 `sendfile` 指令可以包含在 `http`、`server` 和 `location` 等各种上下文中,也可以在 location 上下文的 `if` 指令中使用。注意,尽管启用 sendfile 通常会带来更好的性能,但重要的是要确保服务器的配置和应用程序逻辑能够安全地处理该指令的使用,因为它可能在某些配置(例如涉及 TLS 或特定日志记录场景的配置)下引入复杂性。
配置示例
http {
sendfile on;
server {
listen 80;
server_name example.com;
location / {
root /var/www/html;
index index.html;
}
}
}⚠
由于数据传输方式的原因,使用 `sendfile` 与 non-blocking I/O 配合可能导致意外行为。
⚠
某些配置(例如 proxying 或某些模块(例如 HTTP/2))可能与 `sendfile` 交互不良,因此请务必相应地测试性能。