一惨好、gzip
(1)配置語法
Syntax: gzip on|off;
Default:gzip off;
Context: http, server, location, if in location;
作用:壓縮傳輸
Syntax: gzip_comp_level level;
Default:gzip_comp_level 1;
Context: http, server, location;
作用:gzip壓縮比煌茴,最小1,處理速度最快日川;最大9蔓腐,但處理最慢(傳輸快但比較消耗cpu)
Syntax: gzip_http_version 1.0|1.1;
Default:gzip_http_version 1.1;
Context: http, server, location;
作用:控制gzip http協(xié)議的版本,當(dāng)前主流版本1.1
(2)示例演示
- 步驟一
opt/ app/code/images
下添加一張圖片bg.jpg龄句,用于演示圖片壓縮
opt/ app/code/doc
下添加一access.txt回论,用于演示文本壓縮 - 步驟二
vi/etc/nginx/conf.d/static_server.conf
,創(chuàng)建static_server.conf 配置文件,配置以下內(nèi)容:
-
步驟三
瀏覽器訪問圖片,啟動(dòng)配置和不啟動(dòng)配置大小皆為1.09MB?? 說明配置并未生效分歇,暫時(shí)不知為何傀蓉。。卿樱。。硫椰。
瀏覽器訪問結(jié)果.png
二繁调、瀏覽器緩存場(chǎng)景
(1)瀏覽器緩存原理
校驗(yàn)規(guī)則如下圖所示:
- Expires和Cache-Control類似,區(qū)別在于Expires適用于HTTP1.0版本靶草,而Cache-Control 適用于HTTP 1.1版本蹄胰。max-age用于定義本地緩存的有效時(shí)間。
- 本地緩存失效后奕翔,優(yōu)先向服務(wù)器進(jìn)行Etag驗(yàn)證裕寨,Etag記錄的是一串字符串,Last-Modified記錄的是一個(gè)精確到秒的時(shí)間派继。
(2)配置語法expires
Syntax: expires [modified] time;
Default:expires off;
Context: http, server, location, if in location;
作用:添加 Cache-Control, Expires頭
(3)演示示例
先看一下服務(wù)器端未作緩存配置的情況下的請(qǐng)求結(jié)果宾袜。
下圖為清除緩存后首次請(qǐng)求的結(jié)果:狀態(tài)碼200。
下圖為刷新后的結(jié)果:狀態(tài)碼304驾窟。 我們發(fā)現(xiàn)庆猫,請(qǐng)求頭中多了一行Cache-Control:"max-age=0"
,這里需要注意了绅络,這個(gè)Cache-Control頭信息是瀏覽器加進(jìn)去的月培,而不是服務(wù)器返回的,max-age=0(或小于0)恩急,表示每次請(qǐng)求都需要去和服務(wù)器進(jìn)行校驗(yàn)杉畜,比較last-Modified,如果有更新則返回200,否則返回304衷恭。
接下來在服務(wù)器端做緩存配置:
- 步驟1
touch /etc/nginx/conf.d/static_server.conf
,創(chuàng)建static_server.conf 配置文件 - 步驟2
vi /etc/nginx/conf.d/static_server.conf
, 在static_server.conf 中配置以下內(nèi)容此叠,配置的緩存失效時(shí)間為24h
- 步驟3
下圖為清除緩存后首次請(qǐng)求的結(jié)果:可以看到,響應(yīng)頭中被寫入了Cache-Control:"max-age=86400"
, 這說明我們的配置已經(jīng)成功了(86400的單位為秒随珠,等于我們配置的24h)拌蜘。
配置后首次請(qǐng)求.png
下圖為刷新后的結(jié)果:這里需要注意的是杆烁,雖然我們?cè)诜?wù)端的配置成功寫入了響應(yīng)頭,但是客戶端不一定會(huì)遵循服務(wù)端配置简卧,這里瀏覽器使用了自己的Cache-Contorl:"max-age=0", 即每次請(qǐng)求都需要去和服務(wù)器校驗(yàn)Etag和Last-Modified;
三兔魂、跨域
瀏覽器會(huì)去讀取服務(wù)器返回的Access-Confrol-Allow-Origin頭信息,判斷是否可以訪問举娩。默認(rèn)情況下田绑,瀏覽器禁止跨域訪問,因?yàn)榭缬蛟L問不安全机隙,容易出現(xiàn)CSRF攻擊(Cross-site request forgery桐绒,跨站請(qǐng)求偽造)。
但實(shí)際中出于一些業(yè)務(wù)需求芙代,需要允許跨站訪問吊奢。
(1)Nginx允許跨站訪問的配置語法:
Syntax:add_header name value [always];
Default:--;
Context: http, server, location, if in location;
(2)配置示例
location ~ .*\.(htm|html)$ {
add_header Access-Control-Allow-Origin http://www.candy.com;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
root /opt/app/code;
}
以上配置表示允許來自http://www.candy.com
的GET,POST,PUT,DELETE,OPTIONS跨域請(qǐng)求。
location ~ .*\.(htm|html)$ {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
root /opt/app/code;
}
以上配置表示允許所有站點(diǎn)的請(qǐng)求纹烹。
四页滚、防盜鏈
防止網(wǎng)站資源被盜用。首要方式:區(qū)別哪些請(qǐng)求是非正常的用戶請(qǐng)求铺呵。
(1)什么是 HTTP_REFERER
HTTP Referer是header的一部分裹驰,當(dāng)瀏覽器向web服務(wù)器發(fā)送請(qǐng)求的時(shí)候,一般會(huì)帶上Referer片挂,告訴服務(wù)器我是從哪個(gè)頁面鏈接過來的幻林,服務(wù)器基此可以獲得一些信息用于處理。以下演示什么是http_referer音念。
新建test_refer.html 文件沪饺,該html中訪問了一張圖片
瀏覽器訪問test_refer.html,可以看到發(fā)起了兩個(gè)請(qǐng)求
tail -f /var/log/nginx/access.log
查看訪問日志闷愤,可以看到兩條請(qǐng)求日志随闽,第一條請(qǐng)求請(qǐng)求的是test_refer頁面, $http_referer
變量值為 空 肝谭;第二條請(qǐng)求請(qǐng)求的是圖片掘宪,$http_referer
變量值為http://192.168.122.1/test_refer.html
, 表明該請(qǐng)求是從哪里過來的。
(2)http_refer防盜鏈配置模塊語法
Syntax:valid_referers none | blocked | server_names | string...;
Default:--;
Context: server, location;
-
步驟一攘烛,攜帶 refer信息的請(qǐng)求
curl -e "http://www.baidu.com" -I http://192.168.122.1/bg.jpg
, ( 其中-e
參數(shù)表示來源網(wǎng)址,- I
參數(shù)表示只看頭信息數(shù)據(jù))
以下為生成的日志信息魏滚,可以看到,狀態(tài)為200坟漱,refer 為http://www.baidu.com
access.log.png 步驟二, 修改配置文件
修改配置vi /etc/nginx/conf.d/default.conf
(注意鼠次,if 后要加空格)
配置釋意:
valid_referers
后面接允許訪問的refer信息類型
none
表示允許沒有帶refer 信息的請(qǐng)求
blocked
表示允許referer信息不是標(biāo)準(zhǔn)的http:// 域名
的訪問
192.168.122.1
表示只允許通過該ip的請(qǐng)求
若請(qǐng)求頭不滿足valid_referers
中的設(shè)置,則 $invalid_referer
的值為1,返回403腥寇。
- 步驟三成翩,攜帶 refer信息的請(qǐng)求
重新執(zhí)行curl -e "http://www.baidu.com" -I http://192.168.122.1/bg.jpg
, 返回結(jié)果403,說明配置生效了赦役。