强制 Nginx 使用 gzip 发送静态文件的 Content-Length 标头?

强制 Nginx 使用 gzip 发送静态文件的 Content-Length 标头?

我们正在运行 Nginx 0.7.65[-1ubuntu2.3]。我刚刚注意到,当使用指令alias和提供本地静态文件时gzip onContent-Length标头不会被发送。由于它从本地文件系统提供文件,因此获取长度应该不会有任何问题。我如何强制 Nginx 发送Content-Length带有这些文件的标头?

答案1

事实证明,当使用动态 Gzip那么Content-Length就不会发送标题,因为是Transfer-Encodingchunked预压缩我的文件并切换到静态 Gzip允许 Nginx 提前知道文件大小并发送适当的Content-Length标头。

答案2

以下是添加x-file-size标头的高性能 Nginx 解决方案:

https://github.com/AnthumChris/fetch-progress-indicators/issues/13

## Nginx Lua module must be installed https://docs.nginx.com/nginx/admin-guide/dynamic-modules/lua/
## https://github.com/openresty/lua-nginx-module#header_filter_by_lua
header_filter_by_lua_block {
  function file_len(file_name)
    local file = io.open(file_name, "r")

    if (file == nil) then return -1 end

    local size = file:seek("end")
    file:close()
    return size
  end

  ngx.header["X-File-Size"] = file_len(ngx.var.request_filename);
}

相关内容