Nginx作為靜態資源web服務來控制瀏覽器緩衝以及實現防盜鏈

來源:互聯網
上載者:User
這篇文章給大家介紹的內容是關於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

重點查看 ExpiresCache-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 檔案

  • vim /vagrant/a/a.txt

Hello world!

4. 使用 curl進行訪問測試

  • 不帶referer,可以正常訪問

[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
  • referer為 http://www.baidu.com,返回403

[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
  • referer為 http://192.168.1.110,可以正常訪問

[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
  • referer以 example.開頭或 .example.com 結尾,可以正常訪問

[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
  • referer為 http://192.168.1.110,可以正常訪問

[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
  • referer為 http://google.com,返回403

[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
  • referer為 http://www.google.com,可以正常訪問

[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
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.