$proxy_internal_chunked
$proxy_internal_chunked 指示内部响应是否应以 chunked transfer encoding 发送。 — NGINX Core (HTTP)
说明
变量 $proxy_internal_chunked 控制由 NGINX 的 proxy 模块转发的内部响应所使用的传输编码方式。当设置为 "on" 时,表示对于未指定 Content-Length 的响应,应使用 chunked transfer encoding 进行传输,使数据可以在生成时流式发送到客户端。这在响应长度事先未知的动态内容场景下尤为有用。 该变量通常在 location blocks 或 server contexts 中设置,主要用于 proxying 场景,即客户端请求由后端服务器处理时。NGINX 的默认行为是:如果 upstream server 未指定 Content-Length 头部,则使用 chunked encoding,这允许客户端在不必等待整个响应体发送完毕的情况下立即开始处理响应。开发者可以根据具体用例和所连接的 upstream 服务的行为,有选择地启用或禁用此功能,从而在数据如何被提供方面获得更大的灵活性。 在实际使用中,当处理大型或流式响应时,proxy_internal_chunked 可能带来性能上的好处,但对于无法正确处理 chunked responses 的客户端会增加复杂性。因此在配置 NGINX 使用此变量时,应仔细考虑客户端兼容性和性能方面的影响。
配置示例
location /api {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_buffering off;
# Enable chunked transfer for internal responses
set $proxy_internal_chunked on;
}子系统
http可缓存
否上下文
http, server, location, if确保上游服务器能够正确处理 chunked transfer encoding,因为某些旧客户端可能不支持它。
如果上游较慢,通过 'proxy_buffering off;' 禁用缓冲可能会导致意外的性能问题。
请记住,chunked responses 可能会使通过 HTTP/1.0 的内容传输变得复杂,并且在某些代理或中间件上可能无法正常工作。