Nginx優(yōu)化靜態(tài)資源加載解決Waiting(TTFB)時間過長問題

admin Nginx評論1,234字數(shù) 2145閱讀模式
摘要

我的愛尚資源教程網(wǎng)站每次加載都需要等待兩三秒,一直以為是帶寬問題(因為帶寬真的小,錢的問題),后來開了全站 CDN 加速依然沒有解決問題,今天正好沒事就研究研究。

如圖:多個靜態(tài)文件 Waiting(TTFB) 時間過長
Nginx優(yōu)化靜態(tài)資源加載解決Waiting(TTFB)時間過長問題
如圖:Waiting(TTFB) 時間過長
Nginx優(yōu)化靜態(tài)資源加載解決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)
Nginx優(yōu)化靜態(tài)資源加載解決Waiting(TTFB)時間過長問題

解決辦法第三步,啟用 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)絡,如有侵權,請留言刪除!!!
廣告也精彩
admin
  • 本文由 發(fā)表于 2023年2月5日 13:13:07
  • 轉(zhuǎn)載請務必保留本文鏈接:http://yudch.cn/9961.html
匿名

發(fā)表評論

匿名網(wǎng)友 填寫信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: