最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Nginx服務(wù)器中使用gzip壓縮的相關(guān)配置解析

 更新時(shí)間:2015年12月30日 14:31:10   作者:jevien  
這篇文章主要介紹了Nginx服務(wù)器中使用gzip壓縮的相關(guān)配置解析,包括對(duì)gzip請(qǐng)求處理相關(guān)的壓縮配置,需要的朋友可以參考下

gzip壓縮
使用 gzip 壓縮可以降低網(wǎng)站帶寬消耗,同時(shí)提升訪問速度。
主要在nginx服務(wù)端將頁面進(jìn)行壓縮,然后在瀏覽器端進(jìn)行解壓和解析,
目前大多數(shù)流行的瀏覽器都遲滯gzip格式的壓縮,所以不用擔(dān)心。
默認(rèn)情況下,Nginx的gzip壓縮是關(guān)閉的,同時(shí),Nginx默認(rèn)只對(duì)text/html進(jìn)行壓縮
主要配置如下:

gzip on;#開啟 
gzip_http_version 1.0;#默認(rèn)1.1 
gzip_vary on; 
gzip_comp_level 6; 
gzip_proxied any; 
gzip_types text/plain text/html text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;#壓縮的文件類型 
 
gzip_buffers 16 8k;#設(shè)置gzip申請(qǐng)內(nèi)存的大小,其作用是按塊大小的倍數(shù)申請(qǐng)內(nèi)存空間設(shè)置gzip申請(qǐng)內(nèi)存的大小,其作用是按塊大小的倍數(shù)申請(qǐng)內(nèi)存空間 
 
# Disable gzip for certain browsers. 
gzip_disable “MSIE [1-6].(?!.*SV1)”;#ie6不支持gzip,需要禁用掉ie6,可惡啊!!!! 

注意: 其中的gzip_http_version的設(shè)置,它的默認(rèn)值是1.1,就是說對(duì)HTTP/1.1協(xié)議的請(qǐng)求才會(huì)進(jìn)行g(shù)zip壓縮
如果我們使用了proxy_pass進(jìn)行反向代理,那么nginx和后端的upstream server之間是用HTTP/1.0協(xié)議通信的。

gzip參數(shù)說明:
決定是否開啟gzip模塊
param:on|off
example:gzip on;

gzip_buffers
設(shè)置gzip申請(qǐng)內(nèi)存的大小,其作用是按塊大小的倍數(shù)申請(qǐng)內(nèi)存空間
param1:int 增加的倍數(shù)
param2:int(k) 后面單位是k
example: gzip_buffers 4 8k;

gzip_comp_level
設(shè)置gzip壓縮等級(jí),等級(jí)越底壓縮速度越快文件壓縮比越小,反之速度越慢文件壓縮比越大
param:1-9
example:gzip_com_level 1;

gzip_min_length
當(dāng)返回內(nèi)容大于此值時(shí)才會(huì)使用gzip進(jìn)行壓縮,以K為單位,當(dāng)值為0時(shí),所有頁面都進(jìn)行壓縮
param:int
example:gzip_min_length 1000;

gzip_http_version
用于識(shí)別http協(xié)議的版本,早期的瀏覽器不支持gzip壓縮,用戶會(huì)看到亂碼,所以為了支持前期版本加了此選項(xiàng),目前此項(xiàng)基本可以忽略
param: 1.0|1.1
example:gzip_http_version 1.0

gzip_proxied
Nginx做為反向代理的時(shí)候啟用,
param:off|expired|no-cache|no-sotre|private|no_last_modified|no_etag|auth|any]
expample:gzip_proxied no-cache;
off – 關(guān)閉所有的代理結(jié)果數(shù)據(jù)壓縮
expired – 啟用壓縮,如果header中包含”Expires”頭信息
no-cache – 啟用壓縮,如果header中包含”Cache-Control:no-cache”頭信息
no-store – 啟用壓縮,如果header中包含”Cache-Control:no-store”頭信息
private – 啟用壓縮,如果header中包含”Cache-Control:private”頭信息
no_last_modified – 啟用壓縮,如果header中包含”Last_Modified”頭信息
no_etag – 啟用壓縮,如果header中包含“ETag”頭信息
auth – 啟用壓縮,如果header中包含“Authorization”頭信息
any – 無條件壓縮所有結(jié)果數(shù)據(jù)

gzip_types
設(shè)置需要壓縮的MIME類型,非設(shè)置值不進(jìn)行壓縮
param:text/html|application/x-javascript|text/css|application/xml
example:gzip_types text/html;

gzip_vary on;
和http頭有關(guān)系,加個(gè)vary頭,給代理服務(wù)器用的,有的瀏覽器支持壓縮,有的不支持,所以避免浪費(fèi)不支持的也壓縮,所以根據(jù)客戶端的HTTP頭來判斷,是否需要壓縮

Nginx與Gzip請(qǐng)求
一般線程的Nginx的Gzip模塊都是和Response相關(guān)的Gzip,但如果需要的是和Request相關(guān)的Gzip呢?來看下面:
方案

第一個(gè)選擇是使用lua-zlib

local zlib = require "zlib"

local encoding = ngx.req.get_headers()["Content-Encoding"]

if encoding == "gzip" then
  local body = ngx.req.get_body_data()

  if body then
    local stream = zlib.inflate()
    ngx.req.set_body_data(stream(body))
  end
end

第二個(gè)選擇是通過LuaJIT的FFI庫來包裝ZLIB模塊官方教程里有一些現(xiàn)成的可供參考的的例子,不過例子里介紹的是Deflate,而不是Gzip,自己用FFI封裝Gzip的話又有點(diǎn)小復(fù)雜,好在別人已經(jīng)做了相關(guān)的工作,那就是lua-files

local ffi = require "ffi"
local zlib = require "zlib"

local function reader(s)
  local done
  return function()
    if done then return end
    done = true
    return s
  end
end

local function writer()
  local t = {}
  return function(data, sz)
    if not data then return table.concat(t) end
    t[#t + 1] = ffi.string(data, sz)
  end
end

local encoding = ngx.req.get_headers()["Content-Encoding"]

if encoding == "gzip" then
  local body = ngx.req.get_body_data()

  if body then
    local write = writer()
    zlib.inflate(reader(body), write, nil, "gzip")
    ngx.req.set_body_data(write())
  end
end

如上例子代碼源自zlib_test.lua,乍看上去,代碼里的reader和writer可能會(huì)令人費(fèi)解,其實(shí)你可以把它們理解成輸入輸出接口,可以修改成文件,數(shù)據(jù)庫等等形式。

別高興太早,當(dāng)你運(yùn)行時(shí),很可能會(huì)遇到如下錯(cuò)誤:

libzlib.so: cannot open shared object file.

實(shí)際上這是因?yàn)槿缦聑lib.lua代碼的緣故:

local C = ffi.load 'zlib'

運(yùn)行時(shí),ffi.load會(huì)自動(dòng)補(bǔ)全文件名,如果是Windows,則加載zlib.dll文件,如果是Linux,則加載libzlib.so,但實(shí)際上在Linux下,ZLIB擴(kuò)展的名字是libz.so,而非libzlib.so。

知道的問題的原委,我們自然就知道如何修改代碼了:

local C

if ffi.os == "Windows" then
  C = ffi.load "zlib"
else
  C = ffi.load "z"
end

有時(shí)候我們不推薦直接修改第三方庫的代碼,因?yàn)檫@樣的話,每次第三庫更新代碼,我們都要做對(duì)應(yīng)的修改,一旦忘記就會(huì)出錯(cuò),這時(shí)候可以考慮做一個(gè)軟連接別名。

測(cè)試

開篇說過,接口都是用PHP做的,不過請(qǐng)求里的Gzip數(shù)據(jù)是用LUA處理的,如何讓PHP使用LUA處理后的數(shù)據(jù)呢?不同的語言似乎是個(gè)難題,好在Nginx有Phases一說,PHP作為FastCGI模塊工作在content階段,LUA可以工作在access階段,這樣它們就和諧了:

location ~ \.php$ {
  access_by_lua_file /path/to/lua/file;

  include fastcgi.conf;
  fastcgi_pass 127.0.0.1:9000;
}

那么lua-zlib和lua-files兩種方案效率如何?下面是我用PHP寫的測(cè)試腳本:

<?php

$url = 'http://url';

$header = implode("\r\n", array(
  'Content-Type: application/x-www-form-urlencoded',
  'Content-Encoding: gzip',
  'Connection: close',
));

$content = gzencode(http_build_query(array(
  'foo' => str_repeat('x', 100),
  'bar' => str_repeat('y', 100),
)));

$options = array(
  'http' => array(
    'protocol_version' => '1.1',
    'method' => 'POST',
    'header' => $header,
    'content' => $content,
  ),
);

$context = stream_context_create($options);

for ($i = 0; $i < 1000; $i++) {
  file_get_contents($url, false, $context);
}

?>

很多人寫測(cè)試腳本的時(shí)候,喜歡在開始結(jié)束部分加上時(shí)間,這樣相減就得到了代碼實(shí)際運(yùn)行的時(shí)間,其實(shí)這是不必要的,利用Linux自帶的time就可以獲取運(yùn)行時(shí)間:

shell> time php /path/to/php/file

相關(guān)文章

  • nginx如何開啟Gzip壓縮

    nginx如何開啟Gzip壓縮

    Gzip壓縮能顯著減小網(wǎng)站靜態(tài)資源如css、js、html的體積,大幅提升加載速度,它通過服務(wù)器端壓縮,瀏覽器端解壓,適用于大多數(shù)現(xiàn)代瀏覽器,但應(yīng)避免對(duì)已壓縮的圖片或大文件進(jìn)行Gzip壓縮,以免無效增加CPU負(fù)擔(dān),配置Gzip壓縮需在nginx的http塊內(nèi)設(shè)置并重啟nginx
    2024-09-09
  • nginx部署https網(wǎng)站的實(shí)現(xiàn)步驟(親測(cè))

    nginx部署https網(wǎng)站的實(shí)現(xiàn)步驟(親測(cè))

    本文詳細(xì)介紹了使用Nginx在保持與http服務(wù)兼容的情況下部署HTTPS,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • nginx下的代理服務(wù)器80端口被封的解決方案

    nginx下的代理服務(wù)器80端口被封的解決方案

    這篇文章主要是講:通過nginx下面的代理服務(wù)器,實(shí)現(xiàn)訪問A地址的時(shí)候自動(dòng)代理到B地址的某個(gè)端口,主要用于標(biāo)題說的某個(gè)端口被日.其他東西都正常的情況下,這玩意早上我剛剛測(cè)試過,這博客就是個(gè)很好的例子.
    2010-06-06
  • Nginx 502 Bad Gateway錯(cuò)誤常見的4種原因和解決方法

    Nginx 502 Bad Gateway錯(cuò)誤常見的4種原因和解決方法

    這篇文章主要介紹了Nginx 502 Bad Gateway錯(cuò)誤常見的4種原因和解決方法,本文適用FastCGI環(huán)境,其中多數(shù)原因通過配置相關(guān)參數(shù)即可解決,需要的朋友可以參考下
    2015-05-05
  • 在nginx中配置pathinfo模式支持thinkphp的URL重寫

    在nginx中配置pathinfo模式支持thinkphp的URL重寫

    這篇文章主要介紹了在nginx中配置pathinfo模式的例子,用來支持thinkphp的URL重寫,并解決了thinkphp一個(gè)路徑問題,需要的朋友可以參考下
    2014-04-04
  • Nginx跨域設(shè)置Access-Control-Allow-Origin無效的解決辦法

    Nginx跨域設(shè)置Access-Control-Allow-Origin無效的解決辦法

    今天小編就為大家分享一篇關(guān)于Nginx跨域設(shè)置Access-Control-Allow-Origin無效的解決辦法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Nginx配置HTTP強(qiáng)制跳轉(zhuǎn)到HTTPS的解決辦法

    Nginx配置HTTP強(qiáng)制跳轉(zhuǎn)到HTTPS的解決辦法

    這篇文章主要給大家介紹了關(guān)于Nginx配置HTTP強(qiáng)制跳轉(zhuǎn)到HTTPS的解決辦法,當(dāng)Nginx配置https后通常需要將用戶http請(qǐng)求強(qiáng)制跳轉(zhuǎn)到https,需要的朋友可以參考下
    2023-08-08
  • 封80端口應(yīng)對(duì)策略 Nginx反向代理For WIN2003超級(jí)傻瓜式配置

    封80端口應(yīng)對(duì)策略 Nginx反向代理For WIN2003超級(jí)傻瓜式配置

    封80應(yīng)對(duì)策略,Nginx反向代理ForWIN2003超級(jí)傻瓜式配置!
    2010-03-03
  • 一篇文章快速掌握Nginx部署前端項(xiàng)目(Nginx安裝配置及部署都非常詳細(xì)!)

    一篇文章快速掌握Nginx部署前端項(xiàng)目(Nginx安裝配置及部署都非常詳細(xì)!)

    這篇文章主要給大家介紹了關(guān)于如何通過一篇文章快速掌握Nginx部署前端項(xiàng)目的相關(guān)資料,文中從Nginx安裝配置及部署都非常詳細(xì)哦,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-01-01
  • nginx安裝完成無法解析php解決方法

    nginx安裝完成無法解析php解決方法

    大家好,本篇文章主要講的是nginx安裝完成無法解析php解決方法,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12

最新評(píng)論

吉林市| 普安县| 张家口市| 丰原市| 略阳县| 壤塘县| 江山市| 浪卡子县| 临沧市| 梁平县| 新源县| 广东省| 大名县| 乐安县| 宜兰市| 漳平市| 新兴县| 隆子县| 河津市| 乐昌市| 新和县| 玛多县| 长治县| 郧西县| 资阳市| 开江县| 揭东县| 蓬安县| 陆丰市| 康乐县| 科技| 赞皇县| 健康| 台湾省| 敦煌市| 北辰区| 青铜峡市| 新宾| 桑日县| 句容市| 吐鲁番市|