模塊介紹
mod_concat模塊由淘寶開發,目前已經包含在tengine中,而且淘寶已經在使用這個nginx模塊。不過塔暫時沒有包含在nginx中。這個模塊相似於apache中的modconcat。若是須要使用它,須要使用兩個"?"問號. javascript
來個範例:
http://example.com/??style1.css,style2.css,foo/style3.css
以上將原先3個請求合併爲1個請求 css
若是你擔憂文件被用戶的瀏覽器緩存而沒有及時更新,你依舊能夠帶上一個版本號的參數,以下:
http://example.com/??style1.css,style2.css,foo/style3.css?v=102234 html
1. 安裝nginx concat 前端
# cd /usr/local/src/ # wget http://nginx.org/download/nginx-1.4.2.tar.gz # wget https://github.com/alibaba/nginx-http-concat/archive/master.zip -O nginx-http-concat-master.zip # unzip nginx-http-concat-master.zip # tar -xzvf nginx-1.4.2.tar.gz # cd nginx-1.4.2 # ./configure --prefix=/usr/local/nginx-1.4.2 --with-http_stub_status_module \ --add-module=../nginx-http-concat-master # make # make install
2. 指令directives java
concat on | off
default: concat off
context: http, server, location
開啓火關閉concat linux
concat_types MIME types
default: concat_types: text/css application/x-javascript
context: http, server, location
Defines the MIME types which can be concatenated in a given context.
在給定的配置段中能夠被合併的MIME文件類型. nginx
concat_unique on | off
default: concat_unique on
context: http, server, location
是否只容許同類型文件(相同MIME文件)合併。例如,設置爲off,那麼js和css文件能夠合併。默認狀況下,這個值是on,意味着只有相同的類型文件才能合併。 git
若是但願js和css可以合併爲一個請求,那麼你必須設置concat_unique off,其餘類型文件也能夠用一樣的方式合併.以下爲OFF才能夠的請求:
http://example.com/static/??foo.css,bar/foobaz.js github
concat_max_files numberp
default: concat_max_files 10
context: http, server, location
定義一個給定的配置段裏面容許合併文件的數量,默認最多10個.不過必定要注意,uri不要超過系統的規定的page size,在linux裏面執行getconf PAGESIZE能夠獲取系統的限制.一般限制是4096字節。 web
concat_delimiter: string
default: NONE
context: http, server, locatione
定義文件分隔符
concat_ignore_file_error: on | off
default: off
context: http, server, location
是否忽略文件請求錯誤,例如404和403等
3. 配置nginx
server { listen 80; server_name www.ttlsa.com; root /data/site/www.ttlsa.com; location /static/ { concat on; concat_max_files 20; concat_unique off; } }
4. 測試nginx concat
個人站點有調用到static/ttlsa_concat.css和static/ttlsa_concat.js兩個文件,爲了提升站點訪問速度,我決定使用nginx的concat模塊將兩個請求合併爲一個。
合併前
www.ttlsa.com/static/css/ttsa_concat.css
www.ttlsa.com/static/js/ttsa_concat.js
合併後
http://www.ttlsa.com/static??js/ttlsa_concat.js,css/ttlsa_concat.css?ver=123
測試以前,準備一下文件.
# cd /data/site/www.ttlsa.com/static # cat js/ttlsa_concat.js // this is js file ttlsa_concat.js # cat js/a.js // this is js file a.js # cat css/a.css /** this is css a.css **/ # cat css/ttlsa_concat.css /** this is css ttlsa_concat.css **/
4.1 兩個css合併
# curl http://www.ttlsa.com/static/??css/ttlsa_concat.css,css/a.css /** this is css ttlsa_concat.css **/ /** this is css a.css *
4.2 兩個js合併
# curl http://www.ttlsa.com/static/??js/ttlsa_concat.js,js/a.js // this is js file ttlsa_concat.js // this is js file a.js
4.3 js與css合併
# curl http://www.ttlsa.com/static/??js/ttlsa_concat.js,css/ttlsa_concat.css // this is js file ttlsa_concat.js /** this is css ttlsa_concat.css **/
4.4 帶版本號參數
# curl http://www.ttlsa.com/static/??css/ttlsa_concat.css,css/a.css?123 /** this is css ttlsa_concat.css **/ /** this is css a.css *
以上僅僅用了兩個文件來測試,在具體應用中,你們可使用多個,具體幾個由你的nginx配置來控制. 在具體的環境中,都是如下方式來調用,如下方法摘自官方文檔.
js:
<script src="??bar1.js,bar22.css,subdir/bar3.js?v=3245" />
以上意思是將ba1.Js,bar22.css和subdir/bar3.js這三個請求合併爲一個,而且版本號爲3245.
css:
<link rel="stylesheet" href="??foo1.css,foo2.css,subdir/foo3.css?v=2345" />
這邊也是一個道理,只不過只包含css.
5. 結束語
減小web請求在必定程度上能減小web服務器的壓力,簡單的使用nginx concat模塊即可以實現這個功能,不過須要前端設計師來使用。若是想減小web請求,又不想讓前端設計師來插手的話,你們能夠參考下google出的pagespeed模塊
6. 參考文章
官方:http://wiki.nginx.org/HttpConcatModule
來源站點:運維生存時間 網址:http://www.ttlsa.com/html/3332.html