国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

云服務器|WEB服務器|FTP服務器|郵件服務器|虛擬主機|服務器安全|DNS服務器|服務器知識|Nginx|IIS|Tomcat|

服務器之家 - 服務器技術 - Nginx - Nginx服務器中使用gzip壓縮的相關配置解析

Nginx服務器中使用gzip壓縮的相關配置解析

2019-11-05 12:01jevien Nginx

這篇文章主要介紹了Nginx服務器中使用gzip壓縮的相關配置解析,包括對gzip請求處理相關的壓縮配置,需要的朋友可以參考下

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

?
1
2
3
4
5
6
7
8
9
10
11
gzip on;#開啟
gzip_http_version 1.0;#默認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;#設置gzip申請內存的大小,其作用是按塊大小的倍數申請內存空間設置gzip申請內存的大小,其作用是按塊大小的倍數申請內存空間
 
# Disable gzip for certain browsers.
gzip_disable “MSIE [1-6].(?!.*SV1)”;#ie6不支持gzip,需要禁用掉ie6,可惡啊!!!!

注意: 其中的gzip_http_version的設置,它的默認值是1.1,就是說對HTTP/1.1協議的請求才會進行gzip壓縮
如果我們使用了proxy_pass進行反向代理,那么nginx和后端的upstream server之間是用HTTP/1.0協議通信的。

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

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

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

gzip_min_length
當返回內容大于此值時才會使用gzip進行壓縮,以K為單位,當值為0時,所有頁面都進行壓縮
param:int
example:gzip_min_length 1000;

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

gzip_proxied
Nginx做為反向代理的時候啟用,
param:off|expired|no-cache|no-sotre|private|no_last_modified|no_etag|auth|any]
expample:gzip_proxied no-cache;
off – 關閉所有的代理結果數據壓縮
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 – 無條件壓縮所有結果數據

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

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

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

第一個選擇是使用lua-zlib:

?
1
2
3
4
5
6
7
8
9
10
11
12
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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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可能會令人費解,其實你可以把它們理解成輸入輸出接口,可以修改成文件,數據庫等等形式。

別高興太早,當你運行時,很可能會遇到如下錯誤:

?
1
libzlib.so: cannot open shared object file.

實際上這是因為如下zlib.lua代碼的緣故:

?
1
local C = ffi.load 'zlib'

運行時,ffi.load會自動補全文件名,如果是Windows,則加載zlib.dll文件,如果是Linux,則加載libzlib.so,但實際上在Linux下,ZLIB擴展的名字是libz.so,而非libzlib.so。

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

?
1
2
3
4
5
6
7
local C
 
if ffi.os == "Windows" then
  C = ffi.load "zlib"
else
  C = ffi.load "z"
end

有時候我們不推薦直接修改第三方庫的代碼,因為這樣的話,每次第三庫更新代碼,我們都要做對應的修改,一旦忘記就會出錯,這時候可以考慮做一個軟連接別名。

測試

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

?
1
2
3
4
5
6
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寫的測試腳本:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?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);
}
 
?>

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

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

 

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 亚洲国产精品99久久久久久久久 | 天天综合天天做天天综合 | 午夜精品一区二区三区在线视频 | 中文av一区二区三区 | 91福利视频导航 | 91精品在线播放 | 国产一区二区视频精品 | 天天干人人 | 超碰在线人人草 | 日韩国产中文字幕 | 成人精品 | 欧美爱爱视频 | 国产麻豆91视频 | 免费午夜视频 | 一区免费视频 | 国产中文字幕在线免费观看 | 九月激情网 | 51ⅴ精品国产91久久久久久 | 五月天婷婷在线视频 | 久久人人爽人人爽人人片av不 | 欧美日韩亚洲综合 | 成人精品视频 | 欧洲精品在线观看 | 91xxx在线观看 | 国产精品一区二区三区四区 | 九九精品在线 | 91视频.www | 亚洲午夜精品久久久久久高潮 | 色婷婷av一区二区三区大白胸 | 亚洲综合中文字幕在线观看 | 国产高清视频 | 91精品一区二区 | 日本在线免费观看 | 久操视频免费在线观看 | 国产亚洲精品美女久久久久久久久久 | 天天干天天草 | 97久久精品午夜一区二区 | 日韩综合在线 | 69久久夜色精品国产69乱www | 亚洲精品电影在线观看 | 日比视频网站 |