Maison  >  Article  >  développement back-end  >  Nginx sert de service Web de ressources statiques pour contrôler la mise en cache du navigateur et empêcher les liens dynamiques

Nginx sert de service Web de ressources statiques pour contrôler la mise en cache du navigateur et empêcher les liens dynamiques

不言
不言original
2018-08-06 11:41:292327parcourir

Cet article vous présente Nginx en tant que service Web de ressources statiques pour contrôler le cache du navigateur et implémenter l'anti-sangsue. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

1. Contrôler le cache du navigateur

1. Introduction au cache du navigateur

Le cache du navigateur suit le mécanisme de mise en cache défini par le protocole HTTP (tel que : Expire ; Contrôle du cache, etc. .) .

Lorsque le navigateur n'a pas de cache, le processus de réponse à la demande

Nginx sert de service Web de ressources statiques pour contrôler la mise en cache du navigateur et empêcher les liens dynamiques

Lorsque le navigateur a Lors de la mise en cache, processus de réponse à la demande

Nginx sert de service Web de ressources statiques pour contrôler la mise en cache du navigateur et empêcher les liens dynamiques

Mécanisme d'expiration de la vérification du cache du navigateur

校验是否过期 Cache-Control(max-age)、Expires
协议中Etag头信息校验 Etag
Last-Modified头信息校验 Last-Modified

Processus de demande du navigateur

Nginx sert de service Web de ressources statiques pour contrôler la mise en cache du navigateur et empêcher les liens dynamiques

2. Nginx contrôle la configuration du cache du navigateur

Nginx passe le contrôle du navigateur cache en ajoutant les informations d’en-tête Cache-Control (max-age) et Expires.

ngx_http_headers_module

Syntaxe

Syntax:    expires [modified] time;
        expires epoch | max | off;
Default:    expires off;
Context:    http, server, location, if in location

Cet élément de configuration peut contrôler "Expire" et "Cache" dans le HTTP "response -Control" informations d'en-tête (qui contrôlent la mise en cache des pages).

Le délai d'expiration dans l'en-tête "Expires" est la somme de l'heure actuelle du système et de la valeur de temps que vous avez définie. Si le paramètre modifié est spécifié, le délai d'expiration est la somme de l'heure de la dernière modification du fichier et de la valeur temporelle que vous avez définie.
Le contenu de l'en-tête "Cache-Control" dépend du symbole spécifiant l'heure. Vous pouvez utiliser des nombres positifs ou négatifs dans la valeur temporelle.
Lorsque le temps est un nombre négatif, "Cache-Control : no-cache" ;
Lorsque le temps est un nombre positif ou 0, "Cache-Control : max-age=time", l'unité est la seconde. Le paramètre

epoch est utilisé pour spécifier la valeur de « Expire » au 1er janvier 1970, 00:00:01 GMT.
Le paramètre max est utilisé pour spécifier la valeur de « Expires » comme « Jeu. 31 décembre 2037 23:55:55 GMT » et la valeur de « Cache-Control » comme 10 ans. Le paramètre
off désactive l'ajout ou la modification des informations d'en-tête de réponse "Expires" et "Cache-Control".

3. Exemples d'applications

1 vim /etc/nginx/conf.d/static.conf

server {
    location ~ .*\.(txt|xml)$ {
        # 设置过期时间为1天
        expires 1d;
        root /vagrant/doc;
    }
}

2. . nginx -s reload Recharger le fichier de configuration nginx

3. Créer /vagrant/doc/hello.txt fichier

4. Accédez à 192.168.33.88 via curl /hello. .txt, vérifiez les informations de l'en-tête de réponse 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

et concentrez-vous sur les deux champs Expires et Cache-Control. On peut voir que le temps de cache de hello.txt est de 1 jour. .

2. Anti-hotlinking

Objectif : prévenir le vol de ressources
Idée : distinguer les demandes anormales des utilisateurs

1. sur le module de configuration anti-hotlink http_refer

ngx_http_referer_module

Syntaxe

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

aucun : il n'y a pas de champ Référent dans l'en-tête de la requête
bloqué : Bien que le champ "Referer" existe dans l'en-tête de la requête, sa valeur a été supprimée par le pare-feu ou le serveur proxy​​ces valeurs sont des chaînes qui ne commencent pas par "http:// ; " ou "https://";
server_names : Le champ d'en-tête de requête "Referer" contient le nom du serveur
Chaîne arbitraire : Définit un nom de serveur et un préfixe URI facultatif. Le nom du serveur peut avoir « * » au début ou à la fin. Le port du serveur dans le champ "Referer" est ignoré lors de la vérification.
Expression régulière : la chaîne doit commencer par ~. Il est à noter que l'expression régulière correspond au contenu après "http://" ou "https://".

Exemple

valid_referers none blocked server_names *.example.com example.* www.example.org/galleries/ ~\.google\.;

2. Exemple d'application

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 recharger le fichier de configuration nginx

3. Créer un /vagrant/doc/hello.txt fichier

  • vim /. vagrant/a/a.txt

Hello world!

4. Utiliser curl pour les tests d'accès

  • Non avec référent , vous pouvez accéder à

[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
  • le référent est http://www.baidu.com, et renvoyer 403

[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
  • le référent est http://192.168.1.110 et est accessible normalement

[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
  • le référent commence par example. ou se termine par .example.com et peut être accessible normalement Accédez à

[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
  • le référent est http://192.168.1.110, et vous pouvez accéder à

[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
  • le référent est

    , retournez 403http://google.com

[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
  • le référent est

    , vous pouvez accéder à http://www.google.com

Articles connexes recommandés :
[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 sert de service Web de ressources statiques et effectue une compression de ressources statiques

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn