ホームページ  >  記事  >  バックエンド開発  >  Nginx は、ブラウザーのキャッシュを制御し、ホットリンクを防止する静的リソース Web サービスとして機能します。

Nginx は、ブラウザーのキャッシュを制御し、ホットリンクを防止する静的リソース Web サービスとして機能します。

不言
不言オリジナル
2018-08-06 11:41:292344ブラウズ

この記事では、ブラウザーのキャッシュを制御し、アンチリーチングを実装するための静的リソース Web サービスとしての Nginx について紹介します。これには一定の参考価値があります。必要な友人は参照できます。お役に立てば幸いです。

1. ブラウザ キャッシュの制御

1. ブラウザ キャッシュの概要

ブラウザ キャッシュは、HTTP プロトコルによって定義されたキャッシュ メカニズム (有効期限、キャッシュ制御、など)。

#ブラウザにキャッシュがない場合、リクエスト応答プロセス

Nginx は、ブラウザーのキャッシュを制御し、ホットリンクを防止する静的リソース Web サービスとして機能します。

ブラウザがhas キャッシュ時のリクエスト応答プロセス

Nginx は、ブラウザーのキャッシュを制御し、ホットリンクを防止する静的リソース Web サービスとして機能します。

#ブラウザキャッシュ検証の有効期限メカニズム

#期限切れかどうかを確認します#Cache-Control(max-age)、ExpiresEtag
#プロトコルの Etag ヘッダー情報の検証
Last-Modified ヘッダー情報の検証 Last-Modified

ブラウザ リクエスト プロセス

Nginx は、ブラウザーのキャッシュを制御し、ホットリンクを防止する静的リソース Web サービスとして機能します。

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」ヘッダー情報の有効期限は、現在のシステム時間と設定した時間値の合計です。 Modified パラメータが指定されている場合、有効期限はファイルの最終変更時刻と設定した時刻値の合計になります。
「Cache-Control」ヘッダーの内容は、時間を指定するシンボルによって異なります。時間値には正または負の数値を使用できます。
時間が負の数の場合、「Cache-Control: no-cache」;
時間が正の数または 0 の場合、「Cache-Control: max-age=time」、単位は秒です。

epoch パラメーターは、「Expires」の値を 1970 年 1 月 1 日、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.txt
HTTP/1.1 200 OK
Server: nginx/1.14.0
Date: Tue, 17 Jul 2018 07:12:11 GMT
Content-Type: text/plain
Content-Length: 12
Last-Modified: Tue, 17 Jul 2018 07:07:22 GMT
Connection: keep-alive
ETag: "5b4d95aa-c"
Expires: Wed, 18 Jul 2018 07:12:11 GMT
Cache-Control: max-age=86400
Accept-Ranges: bytes

ExpiresCache-Control

フィールドに注目してください。 hello.txt のキャッシュ時間が 1 日であることがわかります。

2. アンチホットリンク目的: リソースの悪用を防ぐため

アイデア: どのリクエストが異常なユーザーリクエストであるかを区別する

1 http_refer アンチホットリンク設定モジュールに基づく


#ngx_http_referer_module

Syntax
Syntax:    valid_referers none | blocked | server_names | string ...;
Default:    —
Context:    server, location

none: Referer フィールドはありませんリクエスト ヘッダー

blocked : リクエスト ヘッダーに「Referer」フィールドが存在しますが、その値はファイアウォールまたはプロキシ サーバーによって削除されています。これらの値は、「http://」または「http://」で始まらない文字列です。 "https://";server_names : "Referer" リクエスト ヘッダー フィールドにはサーバー名が含まれます 任意の文字列: サーバー名とオプションの URI プレフィックスを定義します。サーバー名の先頭または末尾に「*」を付けることができます。 「Referer」フィールドのサーバーポートはチェック時に無視されます。

正規表現: 文字列は ~ で始まる必要があります。正規表現は「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を使用します

リファラーなしでも、通常どおりアクセスできます

[root~]# curl -I http://127.0.0.1/hello.txt
HTTP/1.1 200 OK
Server: nginx/1.14.0
Date: Fri, 03 Aug 2018 01:34:12 GMT
Content-Type: text/plain
Content-Length: 12
Last-Modified: Tue, 17 Jul 2018 07:07:22 GMT
Connection: keep-alive
ETag: "5b4d95aa-c"
Accept-Ranges: bytes
  • リファラーは

    http://www.baidu.com
  • です。
  • [root~]# curl -e "http://www.baidu.com" -I http://127.0.0.1/hello.txt
    HTTP/1.1 403 Forbidden
    Server: nginx/1.14.0
    Date: Fri, 03 Aug 2018 01:34:34 GMT
    Content-Type: text/html
    Content-Length: 169
    Connection: keep-alive

    リファラーは

    http://192.168.1.110
  • で、正常にアクセスできます
  • [root~]# curl -e "http://192.168.1.110" -I http://127.0.0.1/hello.txt
    HTTP/1.1 200 OK
    Server: nginx/1.14.0
    Date: Thu, 02 Aug 2018 11:31:51 GMT
    Content-Type: text/plain
    Content-Length: 12
    Last-Modified: Tue, 17 Jul 2018 07:07:22 GMT
    Connection: keep-alive
    ETag: "5b4d95aa-c"
    Accept-Ranges: bytes

    リファラーは

    example.
  • で始まるか
.example.com
    で終わり、
  • ## にアクセスできます#

    [root~]# curl -e "http://www.example.com" -I http://127.0.0.1/hello.txt
    HTTP/1.1 200 OK
    Server: nginx/1.14.0
    Date: Thu, 02 Aug 2018 11:33:47 GMT
    Content-Type: text/plain
    Content-Length: 12
    Last-Modified: Tue, 17 Jul 2018 07:07:22 GMT
    Connection: keep-alive
    ETag: "5b4d95aa-c"
    Accept-Ranges: bytes
    
    [root~]# curl -e "http://example.baidu.com" -I http://127.0.0.1/hello.txt
    HTTP/1.1 200 OK
    Server: nginx/1.14.0
    Date: Thu, 02 Aug 2018 11:33:53 GMT
    Content-Type: text/plain
    Content-Length: 12
    Last-Modified: Tue, 17 Jul 2018 07:07:22 GMT
    Connection: keep-alive
    ETag: "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.txt
    HTTP/1.1 200 OK
    Server: nginx/1.14.0
    Date: Thu, 02 Aug 2018 11:31:51 GMT
    Content-Type: text/plain
    Content-Length: 12
    Last-Modified: Tue, 17 Jul 2018 07:07:22 GMT
    Connection: keep-alive
    ETag: "5b4d95aa-c"
    Accept-Ranges: bytes
  • リファラーは http:// google.com

    、403
    • [root~]# curl -e "http://google.com" -I http://127.0.0.1/hello.txt
      HTTP/1.1 403 Forbidden
      Server: nginx/1.14.0
      Date: Thu, 02 Aug 2018 11:37:43 GMT
      Content-Type: text/html
      Content-Length: 169
      Connection: keep-alive
    • リファラーは http://www を返します。 google.com

      にアクセスでき、通常どおりアクセスできます
      • [root~]# curl -e "http://www.google.com" -I http://127.0.0.1/hello.txt
        HTTP/1.1 200 OK
        Server: nginx/1.14.0
        Date: Thu, 02 Aug 2018 11:37:50 GMT
        Content-Type: text/plain
        Content-Length: 12
        Last-Modified: Tue, 17 Jul 2018 07:07:22 GMT
        Connection: keep-alive
        ETag: "5b4d95aa-c"
        Accept-Ranges: bytes
      • おすすめ関連記事:

        Nginx は静的リソース Web サービスとして機能し、静的リソースを実行します圧縮###########

      • 以上がNginx は、ブラウザーのキャッシュを制御し、ホットリンクを防止する静的リソース Web サービスとして機能します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

        声明:
        この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。