Мы используем 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);
}