ngx_pagespeed是Nginx的一個擴充套件模組,藉助pagespeed,為Nginx網站伺服器提速。主要的功能是針對前端頁面而進行伺服器端的優化,對前端設計人員來說,可以省去優化css、js以及圖片的過程。
ngx_pagespeed對nginx自身負載能力的提升基本是看不到的,甚至會因為進行伺服器端的優化而使系統增加負載;但從減少客戶請求數的角度去看,犧牲部分伺服器效能還是值得的。
ngx_pagespeed模組的主要功能大致有:
1)影象優化:剝離後設資料、動態調整,重新壓縮
2)CSS和JavaScript壓縮、合併、級聯、內聯
3)小資源內聯
4)推遲影象和JavaScript載入
5)對HTML重寫、壓縮空格、去除註釋等
6)提升快取週期
作為Nginx元件,ngx_pagespeed將重寫你的網頁,讓使用者以更快的速度進行訪問。重寫的工作包括壓縮圖片、縮減CSS和JavaScript、擴充套件快取時間,同樣還包括其它一些最佳實踐:
1)優化快取----整合應用程式的資料和邏輯
2)最小化round-trip次數----削減連續的請求/響應週期數
3)最小化請求開銷----削減上傳大小
4)最小化負載大小----削減響應、下載及快取頁面大小
5)優化瀏覽器渲染----改善瀏覽器頁面佈局
6)移動方面的優化----優化站點行動網路和裝置方面的相關特性
溫馨小提示:
ngx_pagespeed環境安裝:模組是一個開源模組,功能上與mod_pagespeed(Apache前端加速模組)相比稍有欠缺。Github上針對ngx_pagespeed Bugs的反饋更新很頻繁,基本上都能很快得到解決,要是部署在生產環境需要謹慎。
另,系統內GCC版本必須大於4.2。ngx_pagespeed更新頻率較高,建議及時更新到最新版本,而且最好先部署在本地環境中,經過一番測試穩定後再上線生產環境。
PageSpeed旨在縮短網頁載入的時間,減少網站伺服器的頻寬使用量。
PageSpeed模組可以使用數量眾多的重寫"過濾器",每個過濾器都可以選擇性地開啟/關閉,從而自動進行各種優化(比如,減小文件大小、減少HTTP請求資料、減少HTTP往返次數以及縮短DNS解析時間)。
下面是ngx_pagespeed支援的其中一些過濾器,想了解支援的全部過濾器,請參閱官方文件。
1)Collapse Whitespace(壓縮空白):通過把HTML網頁中的多處連續空白換成一處空白,減少頻寬使用量。 2)Canonicalize JavaScript Libraries(規範化轉換JavaScript庫):通過自動把流行的JavaScript庫換成免費託管的JavaScript庫(比如由谷歌託管),減少頻寬使用量。 3)Combine CSS(合併CSS):通過把多個CSS檔案合併成一個CSS檔案,減少HTTP請求數量。 4)Combine JavaScript(合併JavaScript):通過把多個JavaScript檔案合併成一個JavaScript檔案,減少HTTP請求數量。 5)Elide Attributes(省略屬性):通過刪除由預設屬性指定的標籤,縮小文件大小。 6)Extend Cache(擴充套件快取):通過優化網頁資源的可快取性,減少頻寬使用量。 7)Flatten CSS Imports(精簡CSS匯入):通過刪除CSS檔案中的@import,減少HTTP請求往返次數。 8)Lazyload Images(延時載入圖片):延時載入在客戶端瀏覽器上看不見的圖片。 9)Minify JavaScript(縮小JavaScript):通過縮小JavaScript,減少頻寬使用量。 10)Optimize Images(優化圖片):通過引入更多的內嵌圖片、壓縮圖片,或者將GIF圖片轉換成PNG圖片,優化圖片分發。 11)Pre-Resolve DNS(預解析DNS):通過預解析DNS,縮短DNS解析時間。 12)Prioritize Critical CSS(優化載入關鍵CSS規則):重寫CSS檔案,以便首先載入渲染頁面的CSS規則。
與Apache網站伺服器不一樣,Nginx模組無法在執行時動態載入,而是必須在編譯時載入。ngx_pagespeed模組並未內建在隨主要Linux發行版(比如Fedora 19)釋出的Nginx程式包中,所以說想使用Nginx中的PageSpeed,必須利用原始碼來構建Nginx。
ngx_pagespeed環境安裝:(提前yum install gcc-c++ pcre-devel zlib-devel make wget )
相關包下載地址:https://pan.baidu.com/s/1dFCCleL
提取密碼:h7ku
[root@bastion-IDC ~]# cd /usr/local/src/ [root@bastion-IDC src]# wget https://github.com/pagespeed/ngx_pagespeed/archive/release-1.6.29.5-beta.zip [root@bastion-IDC src]# unzip release-1.6.29.5-beta.zip [root@bastion-IDC src]# cd ngx_pagespeed-release-1.6.29.5-beta/ [root@bastion-IDC ngx_pagespeed-release-1.6.29.5-beta]# wget https://dl.google.com/dl/page-speed/psol/1.6.29.5.tar.gz [root@bastion-IDC ngx_pagespeed-release-1.6.29.5-beta]# tar -zvxf 1.6.29.5.tar.gz
然後重新編譯nginx,編譯時跟上--add-module= /usr/local/src/ngx_pagespeed-release-1.6.29.5-beta模組引數
cd nginx-1.9.7 ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --add-module= /usr/local/src/ngx_pagespeed-release-1.6.29.5-beta make && make install
使用ngx_pagespeed
# mkdir /var/ngx_pagespeed_cache # chown www.www /var/ngx_pagespeed_cache //www是nginx服務啟動使用者 # cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak # vim /usr/local/nginx/conf/nginx.conf ........ server { ........ # 啟用ngx_pagespeed pagespeed on; pagespeed FileCachePath /var/ngx_pagespeed_cache; # 啟用CoreFilters pagespeed RewriteLevel CoreFilters; # 禁用CoreFilters中的某些過濾器 pagespeed DisableFilters rewrite_images; # 選擇性地啟用額外的過濾器 pagespeed EnableFilters local_storage_cache; pagespeed EnableFilters collapse_whitespace,remove_comments; pagespeed EnableFilters outline_css; pagespeed EnableFilters flatten_css_imports; pagespeed EnableFilters move_css_above_scripts; pagespeed EnableFilters move_css_to_head; pagespeed EnableFilters outline_javascript; pagespeed EnableFilters combine_javascript; pagespeed EnableFilters combine_css; pagespeed EnableFilters rewrite_javascript; pagespeed EnableFilters rewrite_css,sprite_images; pagespeed EnableFilters rewrite_style_attributes; pagespeed EnableFilters recompress_images; pagespeed EnableFilters resize_images; pagespeed EnableFilters convert_meta_tags; location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { add_header "" ""; } location ~ "^/ngx_pagespeed_static/" { } location ~ "^/ngx_pagespeed_beacon$" { } location /ngx_pagespeed_statistics { allow 127.0.0.1; deny all; } location /ngx_pagespeed_message { allow 127.0.0.1; deny all; } ....... } # /usr/local/nginx/sbin/nginx -t # /usr/local/nginx/sbin/nginx
可以參閱官方文件CoreFilters中的過濾器。