如圖:多個靜態(tài)文件 Waiting(TTFB) 時間過長
如圖:Waiting(TTFB) 時間過長
都是靜態(tài)資源,文件也不大,試了全站 CDN 和單個文件 CDN 沒有任何效果,后來懷疑是Nginx 配置問題。經(jīng)過查詢文檔檢查配置最終找到問題。
解決辦法第一步,啟用緩存
Nginx 靜態(tài)資源配置了禁用緩存,導致每次都重新加載。開啟緩存后刷新就很快了,但是第一次加載依然是兩三秒。
開啟緩存靜態(tài)資源
# 開啟緩存,關閉靜態(tài)資源日志記錄,節(jié)省服務器資源 location ~ .*\.(gif|jpg|jpeg|png|ico|css|js|woff|woff2|ttf)$ { root /usr/xxx; #禁用緩存 #add_header Cache-Control no-cache; # 關閉日志 access_log off; #緩存7天 expires 7d; }
解決辦法第二步,啟用 gzip 壓縮
第一次加載依然是兩三秒,解決辦法是開啟靜態(tài)資源壓縮,速度瞬間提升 20 倍哈哈。
在 http 模塊加入以下配置
# 開啟gzip gzip on; # 啟用gzip壓縮的最小文件,小于設置值的文件將不會壓縮 gzip_min_length 1k; # gzip 壓縮級別,1-10,數(shù)字越大壓縮的越好,也越占用CPU時間。一般設置1和2 gzip_comp_level 1; # 進行壓縮的文件類型。javascript有多種形式。其中的值可以在 mime.types 文件中找到。 gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; # 是否在http header中添加Vary: Accept-Encoding,建議開啟 gzip_vary on; # 禁用IE 8 gzip gzip_disable "MSIE [1-8]\."; # 設置緩存路徑并且使用一塊最大100M的共享內(nèi)存,用于硬盤上的文件索引,包括文件名和請求次數(shù),每個文件在1天內(nèi)若不活躍(無請求)則從硬盤上淘汰,硬盤緩存最大10G,滿了則根據(jù)LRU算法自動清除緩存。 proxy_cache_path /usr/local/nginx/cache/ levels=1:2 keys_zone=imgcache:100m inactive=1d max_size=10g;
再來看看現(xiàn)在,靜態(tài)資源加載的速度,保持在100ms以內(nèi)
解決辦法第三步,啟用 http2 協(xié)議(可選)
HTTP/2(超文本傳輸協(xié)議第2版,最初命名為HTTP 2.0),簡稱為h2(基于TLS/1.2或以上版本的加密連接)或h2c(非加密連接),是HTTP協(xié)議的的第二個主要版本,使用于萬維網(wǎng)。
如果沒有安裝http_v2_module模塊,則需要重新編譯安裝。
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx/ --with-http_addition_module --with-http_flv_module --with-http_gzip_static_module --with-http_realip_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_dav_module --with-http_v2_module --with-http_geoip_module --with-stream --with-stream=dynamic
Nginx 啟用http2
并優(yōu)化https
性能, 從而獲得更好的 TTFB 和減少的延遲。
server { listen 443 ssl; # 改為 listen 443 ssl http2; # https 優(yōu)化 # 減少SSL緩沖區(qū)大小,默認情況下,緩沖區(qū)為16k,這是一種“一刀切”的方法,旨在應對較大的響應。但是,為了最大程度地減少TTFB,通常最好使用較小的值。 ssl_buffer_size 4k; ssl_prefer_server_ciphers on; ssl_protocols TLSv1.2 TLSv1.3; # 最低支持1.2 協(xié)議配置 # 使用http2并啟用Nginx ssl_session_cache將確保初始連接的HTTPS性能更快,并且頁面加載速度快于http。 ssl_session_cache shared:SSL:1m; # 可容納約4000個會話 ssl_session_timeout 24h; # 24小時,在此期間可以重復使用會話 # 由于Nginx尚未正確實現(xiàn)會話票證加密密鑰的輪換,因此將其關閉。 ssl_session_tickets off; ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate cert/xxxxx.pem; # 證書地址 resolver 8.8.8.8 202.106.0.20 valid=300s; resolver_timeout 5s; }
版權聲明:文章圖片資源來源于網(wǎng)絡,如有侵權,請留言刪除!!!
評論