原 Nginx Lua服務端合併靜態檔案

2022-04-02 14:03:31 字數 2009 閱讀 4500

原始碼已經上傳到github:

nginx-lua-static-merger是乙個基於openresty的模組,主要用於合併靜態檔案,減少http請求,加快靜態檔案訪問速度的模組。

使用nginx-lua-static-merger 需要在編譯nginx時候新增openresty的模組,或者直接安裝openresty作為伺服器。

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

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

nginx的模組從功能上分為如下三類:

handlers(處理器模組),直接處理請求,並進行輸出內容和修改headers資訊等操作。handlers處理器模組一般只能有乙個。

filters (過濾器模組),主要對其他處理器模組輸出的內容進行修改操作,最後由nginx輸出。

proxies (**類模組),nginx的http upstream之類的模組,這些模組主要與後端一些服務比如fastcgi等進行互動,實現服務**和負載均衡等功能。

也就是說,乙個http請求過來,nginx先處理請求資訊,然後過濾資訊,最後丟給**來處理,它本身處理的東西並不多,它僅僅是通過查詢配置檔案將此次請求對映到乙個location block,而此location中所配置的各個指令則會啟動不同的模組去完成工作。

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

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

去掉首頁index.html的載入時間,可以看到,載入靜態檔案css,js時間耗費了很長的等待時間,並且image的載入是在js和css載入完後才載入的,也就是說,如果js或css載入慢了,那麼頁面就慢了。

這個頁面是github.com/grasses。

openresty是國人寫的開源專案,打包了標準的 nginx 核心,很多的常用的第三方模組,以及它們的大多數依賴項。

tar xzvf ngx_openresty-version.tar.gz

cd ngx_openresty-version/

./configure

make

make install

詳細的安裝教程還是去看官網咖。

|--/usr/local/openresty/nginx

| `--lua

| `--nginx-lua-static-merger.lua

| `--conf

| `--nginx.lua

|--/www/openresty/static

| `--js

| `--css

| `--cache

注意1、nginx.conf中的lua_package_path "/usr/local/openresty/lualib/?.lua;;";和

lua_package_cpath "/usr/local/openresty/lualib/?.so;;";,如果你是編譯nginx而不是直接安裝openresty,目錄記得放對。

2、確保/www/openresty/static有lua寫的許可權。

前端呼叫方法如下:

nginx在location通過 content_by_lua_file 把接下來的處理丟個lua做邏輯。

lua通過uri進行md5編碼,判斷cache是否存在,如果cache不存在,迴圈分割、遍歷uri,訪問響應的路徑,查詢靜態檔案,存在則記錄,最後寫cache入檔案,方便下次訪問。

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

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

第二次訪問就是熱資料了,訪問速度是增加的:

原 Nginx Lua服務端合併靜態檔案

源 已經上傳到github nginx lua static merger是乙個基於openresty的模組,主要用於合併靜態檔案。降低http請求,加快靜態檔案訪問速度的模組。使用nginx lua static merger須要在編譯nginx時候加入openresty的模組,或者直接安裝ope...

Nginx Lua服務端合併靜態檔案

原始碼已經上傳到github nginx lua static merger是乙個基於openresty的模組,主要用於合併靜態檔案,減少http請求,加快靜態檔案訪問速度的模組。使用nginx lua static merger需要在編譯nginx時候新增openresty的模組,或者直接安裝op...

HTTP服務端JSON服務端

最後更新日期 2014 5 18 author kagula 內容簡介 cppcms是個開源web開發框架,通過它可以很容易實現http服務和json服務,這裡介紹cppcms開發環境的搭建。寫乙個cppcms測試程式,它建立http服務,向瀏覽器返回hello,world頁面。cppcms依賴的一...