Nginx 的 sendfile 指令用于启用或禁用零复制文件传输功能。零复制技术通过直接在内核空间和用户空间之间传输数据,避免了数据在用户空间和内核空间之间的多次拷贝,从而提高了文件传输的效率。

指令说明

  • 语法: sendfile on | off;

  • 默认值: sendfile off;

  • 上下文: http, server, location, if in location

参数说明

  • on: 启用 sendfile 功能。

  • off: 禁用 sendfile 功能。

使用场景

  • 适用于静态文件传输,如 HTML、CSS、JavaScript、图片等。

  • 不适用于需要处理或修改文件内容的场景,如动态生成的内容。

案例

假设你有一个 Nginx 配置,用于提供静态文件服务,并且希望启用 sendfile 功能以提高性能:

http {
    server {
        listen 80;
        server_name example.com;

        location /static/ {
            alias /var/www/static/;
            sendfile on;
        }
    }
}

在这个配置中:

  • location /static/ 用于处理 /static/ 路径下的请求。

  • alias /var/www/static/ 指定了静态文件的存储路径。

  • sendfile on 启用了零复制文件传输功能,以提高文件传输效率。

注意事项

  • 在某些操作系统或文件系统上,sendfile 可能无法正常工作,此时需要禁用它。

  • 如果使用了 gzip 压缩,sendfile 可能会被自动禁用,因为压缩需要在用户空间处理数据。

本篇文章内容来源于:Nginxsendfile 零复制指令详细说明以及案例