$request_body_file

$request_body_file 变量包含当请求体过大而无法放入内存时,用于保存该请求体的临时文件的路径。 — NGINX Core (HTTP)

$request_body_file NGINX Core (HTTP)

说明

$request_body_file 变量用于在 HTTP 请求体超过 NGINX 缓冲区大小限制的场景中。当收到请求时,NGINX 会读取请求体;如果请求体大于预定义的大小,它会将请求体保存到服务器文件系统上的临时文件中。该变量随后保存该临时文件的文件路径,便于对请求体进行后续处理。 该变量主要在请求处理阶段设置,具体是在任何核心处理程序(例如 proxy 或 fastcgi 模块)决定不在内存中完整处理请求体时。该变量的典型值会包含文件系统上的文件路径,例如 `/tmp/nginx_request_body_XXXXXX`。该临时文件通常在请求完成或处理后被删除,从而有效管理服务器磁盘空间。 在经常处理大负载(如文件上传)的配置中,适当配置请求体处理,包括缓冲区大小,对于确保最佳性能并避免服务器过载至关重要。

配置示例

server {
    client_max_body_size 10M;
    location /upload {
        proxy_pass http://backend;
        proxy_request_buffering on;
        # Accessing the request body file:
        if ($request_body_file) {
            log_format custom '$remote_addr $request_body_file';
            access_log /var/log/nginx/custom.log custom;
        }
    }
}

子系统

http

可缓存

上下文

http, server, location

确保 client_max_body_size 被适当设置以有效使用 $request_body_file;否则,较大的请求会被拒绝。

注意临时目录的文件系统权限,确保 NGINX 能写入请求体。若未正确设置,可能导致错误或文件不可访问。

并非所有模块都能正确处理临时文件;在与各种 NGINX 模块结合使用时,请再次确认兼容性。