這篇文章給大家介紹的內容是關於Nginx作為靜態資源web服務來控制瀏覽器緩衝以及實現防盜鏈 ,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所協助。
一、控制瀏覽器緩衝
1. 瀏覽器緩衝簡介
瀏覽器緩衝遵循HTTP協議定義的緩衝機制(如:Expires;Cache-control等)。
當瀏覽器無緩衝時,請求響應流程
當瀏覽器有緩衝時,請求響應流程
瀏覽器緩衝校正到期機制
校正是否到期 |
Cache-Control(max-age)、Expires |
協議中Etag頭資訊校正 |
Etag |
Last-Modified頭資訊校正 |
Last-Modified |
瀏覽器請求流程
2. Nginx控制瀏覽器緩衝配置
Nginx通過添加Cache-Control(max-age)、Expires頭資訊的方式控制瀏覽器緩衝。
ngx_http_headers_module
文法
Syntax: expires [modified] time; expires epoch | max | off;Default: expires off;Context: http, server, location, if in location
本配置項可以控制HTTP響應中的“Expires”和“Cache-Control”頭資訊,(起到控制頁面緩衝的作用)。
“Expires”頭資訊中的到期時間為當前系統時間與您設定的 time 值時間的和。如果指定了 modified 參數,則到期時間為檔案的最後修改時間與您設定的 time 值時間的和。
“Cache-Control”頭資訊的內容取決於指定 time 的符號。可以在time值中使用正數或負數。
當 time 為負數,“Cache-Control: no-cache”;
當 time 為正數或0,“Cache-Control: max-age=time”,單位是秒。
epoch 參數用於指定“Expires”的值為 1 January, 1970, 00:00:01 GMT。
max 參數用於指定“Expires”的值為 “Thu, 31 Dec 2037 23:55:55 GMT”,“Cache-Control” 的值為10 年。
off 參數令對“Expires” 和 “Cache-Control”回應標頭資訊的添加或修改失效。
3. 應用執行個體
1. vim /etc/nginx/conf.d/static.conf
server { location ~ .*\.(txt|xml)$ { # 設定到期時間為1天 expires 1d; root /vagrant/doc; }}
2. nginx -s reload 重新載入nginx設定檔
3. 建立 /vagrant/doc/hello.txt
檔案
4. 通過curl訪問 192.168.33.88/hello.txt,查看http回應標頭資訊
[root/etc/nginx]# curl -I 192.168.33.88/hello.txtHTTP/1.1 200 OKServer: nginx/1.14.0Date: Tue, 17 Jul 2018 07:12:11 GMTContent-Type: text/plainContent-Length: 12Last-Modified: Tue, 17 Jul 2018 07:07:22 GMTConnection: keep-aliveETag: "5b4d95aa-c"Expires: Wed, 18 Jul 2018 07:12:11 GMTCache-Control: max-age=86400Accept-Ranges: bytes
重點查看 Expires
和 Cache-Control
兩個欄位,可見,hello.txt 的緩衝時間為1天。
二、防盜鏈
目的:防止資源被盜用
思路:區別哪些請求是非正常的使用者請求
1. 基於http_refer防盜鏈配置模組
ngx_http_referer_module
文法
Syntax: valid_referers none | blocked | server_names | string ...;Default: —Context: server, location
none:要求標頭中沒有 Referer 欄位
blocked:要求標頭中雖然存在“Referer”欄位,但是它的值已經被防火牆或Proxy 伺服器刪除;這些值是不以“http://”或“https://”開頭的字串;
server_names:“Referer”要求標頭欄位包含該伺服器名稱
任一字元串:定義一個伺服器名稱和一個可選的URI首碼。伺服器名開始或結尾可以有 “*” 。檢查時,“Referer”欄位中的伺服器連接埠會被忽略。
Regex:字串必須以 ~ 開頭,值得注意的是,Regex匹配的是在“http://”或“https://”之後的內容。
樣本
valid_referers none blocked server_names *.example.com example.* www.example.org/galleries/ ~\.google\.;
2. 應用執行個體
1. vim conf.d/static.conf
server { location ~ .*\.(txt|xml)$ { # 配置防盜鏈規則 valid_referers none blocked 192.168.1.110 *.example.com example.* ~\.google\.; # 如果不符合防盜鏈規則,則返回403 if ($invalid_referer) { return 403; } root /vagrant/doc; }}
2. nginx -s reload 重新載入nginx設定檔
3. 建立 /vagrant/doc/hello.txt
檔案
Hello world!
4. 使用 curl進行訪問測試
[root~]# curl -I http://127.0.0.1/hello.txtHTTP/1.1 200 OKServer: nginx/1.14.0Date: Fri, 03 Aug 2018 01:34:12 GMTContent-Type: text/plainContent-Length: 12Last-Modified: Tue, 17 Jul 2018 07:07:22 GMTConnection: keep-aliveETag: "5b4d95aa-c"Accept-Ranges: bytes
[root~]# curl -e "http://www.baidu.com" -I http://127.0.0.1/hello.txtHTTP/1.1 403 ForbiddenServer: nginx/1.14.0Date: Fri, 03 Aug 2018 01:34:34 GMTContent-Type: text/htmlContent-Length: 169Connection: keep-alive
[root~]# curl -e "http://192.168.1.110" -I http://127.0.0.1/hello.txtHTTP/1.1 200 OKServer: nginx/1.14.0Date: Thu, 02 Aug 2018 11:31:51 GMTContent-Type: text/plainContent-Length: 12Last-Modified: Tue, 17 Jul 2018 07:07:22 GMTConnection: keep-aliveETag: "5b4d95aa-c"Accept-Ranges: bytes
[root~]# curl -e "http://www.example.com" -I http://127.0.0.1/hello.txtHTTP/1.1 200 OKServer: nginx/1.14.0Date: Thu, 02 Aug 2018 11:33:47 GMTContent-Type: text/plainContent-Length: 12Last-Modified: Tue, 17 Jul 2018 07:07:22 GMTConnection: keep-aliveETag: "5b4d95aa-c"Accept-Ranges: bytes[root~]# curl -e "http://example.baidu.com" -I http://127.0.0.1/hello.txtHTTP/1.1 200 OKServer: nginx/1.14.0Date: Thu, 02 Aug 2018 11:33:53 GMTContent-Type: text/plainContent-Length: 12Last-Modified: Tue, 17 Jul 2018 07:07:22 GMTConnection: keep-aliveETag: "5b4d95aa-c"Accept-Ranges: bytes
[root~]# curl -e "http://192.168.1.110" -I http://127.0.0.1/hello.txtHTTP/1.1 200 OKServer: nginx/1.14.0Date: Thu, 02 Aug 2018 11:31:51 GMTContent-Type: text/plainContent-Length: 12Last-Modified: Tue, 17 Jul 2018 07:07:22 GMTConnection: keep-aliveETag: "5b4d95aa-c"Accept-Ranges: bytes
[root~]# curl -e "http://google.com" -I http://127.0.0.1/hello.txtHTTP/1.1 403 ForbiddenServer: nginx/1.14.0Date: Thu, 02 Aug 2018 11:37:43 GMTContent-Type: text/htmlContent-Length: 169Connection: keep-alive
[root~]# curl -e "http://www.google.com" -I http://127.0.0.1/hello.txtHTTP/1.1 200 OKServer: nginx/1.14.0Date: Thu, 02 Aug 2018 11:37:50 GMTContent-Type: text/plainContent-Length: 12Last-Modified: Tue, 17 Jul 2018 07:07:22 GMTConnection: keep-aliveETag: "5b4d95aa-c"Accept-Ranges: bytes