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

Мы работаем с Nginx 0.7.65[-1ubuntu2.3]. Я только что заметил, что при обслуживании локальных статических файлов с использованием alias директива и gzip on, Content-Length заголовок не отправляется. Поскольку он обслуживает файлы из локальной файловой системы, у него не должно возникнуть никаких проблем с получением длины. Как я могу заставить Nginx отправить Content-Length заголовок с этими файлами?

1 ответ

Решение

Оказывается, что при использовании динамического 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);
}
Другие вопросы по тегам