5

I don't know why http response is missed "Content-Length header" when I use gzip in nginx, i'm really getting stuck,please somebody help me, thank you so much! this is my config file,

nginx.conf

user nobody nobody ; worker_processes 8;

events {
    worker_connections  1024;
    accept_mutex on; # "on" if nginx worker_processes > 1
    use epoll; # enable for Linux 2.6+
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    upstream backend-unicorn {
        server unix:/tmp/unicorn_app.sock fail_timeout=0;
        #server localhost:5000;
    }
    #access_log  logs/access.log  main;
    sendfile        on;
    keepalive_timeout  100;
    gzip on;
    gzip_static on;
    gzip_proxied any;
    gzip_http_version 1.1;
    gzip_comp_level 6;
    gzip_min_length  1100;
    gzip_buffers 16 8k;
    gzip_types text/plain application/zip text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript image$

    server {
        listen       8080;
        server_name  misago;
        access_log  /var/log/nginx/unicorn.access.log  main;
        client_max_body_size 64M;
        location /uploads/ {
            root /usr/local/rails_apps/me_management_tool/current/public/uploads;
            break;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

}
4

2 回答 2

1

当我在 nginx 中使用 gzip 时,我不知道为什么缺少 http 响应“Content-Length 标头”

因为在这种情况下,在发送标头时内容的长度是未知的。Nginx 无法知道内容的压缩程度。

于 2013-03-01T18:34:46.090 回答
1

下面是一个高性能的 Nginx 解决方案,用于x-file-size向 Gzip 响应添加标头。在这里进行全面讨论:https ://github.com/AnthumChris/fetch-progress-indicators/issues/13

location / {
  ## 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);
  }
}
于 2020-05-02T17:28:01.370 回答