Назад | Перейти на главную страницу

Принуждение Nginx к отправке заголовков Content-Length при обслуживании статических файлов с помощью gzip

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