Nginx
根據使用者代理更改 nginx gzip 壓縮級別
我已經分析了我的站點,並意識到將
gzip_comp_level
過去1
用於桌面會降低總吞吐量。但是,在移動設備上,網路速度是瓶頸而不是伺服器 TTFB,設置gzip_comp_level
為4
或更高是有意義的。我想更改
gzip_comp_level
基於使用者代理,但在 NGINX 中似乎不可能。這是我的 nginx.conf
http { server { ... gzip on; gzip_vary on; gzip_proxied any; gzip_buffers 16 8k; gzip_min_length 1024; gzip_types image/png image/svg+xml text/plain text/css image/jpeg application/font-woff application/json application/x-javascript application/javascript text/xml application/xml application/rss+xml text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype; ... location / { include /etc/nginx/mime.types; expires max; sendfile on; tcp_nodelay on; tcp_nopush on; add_header Pragma public; add_header Cache-Control "public"; add_header Vary "Accept-Encoding"; if ($http_user_agent ~* '(iPhone|iPod|Opera Mini|Android.*Mobile|NetFront|PSP|BlackBerry|Windows Phone)') { set $ua_type "mobile"; } if ($ua_type = "mobile") { gzip_comp_level 4; } if ($ua_type != "mobile") { gzip_comp_level 1; } location ~* \.(js|jpg|jpeg|png|css|svg|ttf|woff|woff2)$ { access_log off; log_not_found off; } } } }
NGINX 提供
nginx: [emerg] "gzip_comp_level" directive is not allowed here in /etc/nginx/nginx.conf:44
有沒有辦法解決?
這應該工作
使用
map
我們為$ismobile
基於代理的值(根據需要在下面我的配置中的列表中添加更多代理)。然後我們檢查該值並返回錯誤程式碼。
然後我們讓 nginx 處理錯誤並重定向到包含正確
gzip_comp_level
配置和其餘配置的位置。我只包括了下面的相關部分。
http { map $http_user_agent $ismobile { "default" 0; "~*iphone" 1; ..... } server { error_page 412 = @mobile; error_page 413 = @notmobile; recursive_error_pages on; if ($ismobile = "1"){ return 412; } if ($ismobile = "0"){ return 413; } location @mobile { gzip_comp_level 4; <add rest of config with an include or line by line> } location @notmobile { gzip_comp_level 1; <add rest of config with an include or line by line> } } }