Nginx+Lua服務端合併靜態文件

nginx-lua-static-merger


0x01.About

源碼已經上傳到github:https://github.com/grasses/nginx-lua-static-mergercss

nginx-lua-static-merger是一個基於openresty的模塊,主要用於合併靜態文件,減小http請求,加快靜態文件訪問速度的模塊。html

使用nginx-lua-static-merger 須要在編譯nginx時候添加openresty的模塊,或者直接安裝openresty做爲服務器。前端

nginx-lua-static-merger可讓你的js、css請求不要那麼多,一個就夠了。jquery

nginx-lua-static-merger



0x02.About Nginx

nginx工做

先從nginx原理來看nginx處理http請求的過程。nginx

Nginx的模塊從功能上分爲以下三類:git

Handlers(處理器模塊),直接處理請求,並進行輸出內容和修改headers信息等操做。Handlers處理器模塊通常只能有一個。github

Filters (過濾器模塊),主要對其餘處理器模塊輸出的內容進行修改操做,最後由Nginx輸出。bootstrap

Proxies (代理類模塊),Nginx的HTTP Upstream之類的模塊,這些模塊主要與後端一些服務好比FastCGI等進行交互,實現服務代理和負載均衡等功能。後端

nginx 處理http請求

也就是說,一個http請求過來,nginx先處理請求信息,而後過濾信息,最後丟給代理來處理,它自己處理的東西並很少,它僅僅是經過查找配置文件將這次請求映射到一個location block,而此location中所配置的各個指令則會啓動不一樣的模塊去完成工做。服務器

從正常來看,一個頁面加載10來個js、css是正常的,還有10來個圖片,即便是什麼也不幹,那麼一個頁面也要處理掉20多個http請求,每一個http請求都要跑一遍TCP請求,nginx迴應,過濾,分配。

speed test:

看張圖吧,國外一個網速測試工具:

一個頁面請求消耗的時間

去掉首頁index.html的加載時間,能夠看到,加載靜態文件css,js時間耗費了很長的等待時間,而且image的加載是在js和css加載完後才加載的,也就是說,若是js或css加載慢了,那麼頁面就慢了。

這個頁面是github.com/grasses。



0x02.Usage

Openresty

http://openresty.org/cn/

Openresty是國人寫的開源項目,打包了標準的 Nginx 核心,不少的經常使用的第三方模塊,以及它們的大多數依賴項。

tar xzvf ngx_openresty-VERSION.tar.gz
cd ngx_openresty-VERSION/
./configure
make
make install

詳細的安裝教程仍是去看官網吧。

file path

|--/usr/local/openresty/nginx
|                       `--lua 
|                           `--nginx-lua-static-merger.lua
|                       `--conf 
|                           `--nginx.lua
|--/www/openresty/static
|               `--js
|               `--css
|               `--cache

注意

一、nginx.conf中的lua_package_path "/usr/local/openresty/lualib/?.lua;;";
lua_package_cpath "/usr/local/openresty/lualib/?.so;;";,若是你是編譯nginx而不是直接安裝openresty,目錄記得放對。

二、確保/www/openresty/static有Lua寫的權限。

use

前端調用方法以下:

<link rel="stylesheet" href="/bootstrap/css/bootstrap.min.css;/qiniu/css/main.css;/css/navbar.css">
<script src="/js/jquery.min.js;/js/main.js;/qiniu/bootstrap/js/bootstrap.min.js;/qiniu/js/plupload/plupload.full.min.js;/qiniu/js/plupload/i18n/zh_CN.js"></script>


0x03.How it work

Nginx在location經過 content_by_lua_file 把接下來的處理丟個Lua作邏輯。

Lua經過uri進行md5編碼,判斷cache是否存在,若是cache不存在,循環分割、遍歷uri,訪問響應的路徑,查找靜態文件,存在則記錄,最後寫cache入文件,方便下次訪問。

how nginx-lua-static-merger work



0x04.Effect

下面是在不做處理狀況請求多個js結果:

不作處理

下面是第一次請求下,lua既要獲取數據又要合併生成cache,屬於冷數據:

cold_js_by_ngx_static_merger

cold_js_by_ngx_static_merger

第二次訪問就是熱數據了,訪問速度是增長的:

熱數據




本文出自 夏日小草,轉載請註明出處:http://homeway.me/2015/06/22/nginx-lua-static-merger/



-by小草

2015-06-22 20:04:10

相關文章
相關標籤/搜索