Nginx

使用 gzip 提供靜態文件時強制 Nginx 發送 Content-Length 標頭

  • May 2, 2020

我們正在執行 Nginx 0.7.65

$$ -1ubuntu2.3 $$. 我剛剛注意到,在使用alias指令提供本地靜態文件時gzip on,並Content-Length沒有發送標頭。由於它從本地文件系統提供文件,因此獲取長度應該沒有任何問題。如何強制 Nginx 發送Content-Length帶有這些文件的標頭?

事實證明,當使用動態 Gzip時,Content-Length不會發送標頭,Transfer-Encoding因為chunked. 預壓縮我的文件並切換到靜態 Gzip可以讓 Nginx 提前知道文件大小並發送適當的Content-Length標頭。

這是添加標頭的高性能 Nginx 解決方案x-file-size

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);
}

引用自:https://serverfault.com/questions/529621