> 백엔드 개발 > PHP 튜토리얼 > Nginx는 브라우저 캐싱을 제어하고 핫링크를 방지하는 정적 리소스 웹 서비스 역할을 합니다.

Nginx는 브라우저 캐싱을 제어하고 핫링크를 방지하는 정적 리소스 웹 서비스 역할을 합니다.

不言
풀어 주다: 2023-04-03 16:18:01
원래의
2353명이 탐색했습니다.

이 글에서는 브라우저 캐시를 제어하고 안티-리칭을 구현하는 정적 리소스 웹 서비스인 Nginx를 소개합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

1. 브라우저 캐시 제어

1. 브라우저 캐시 소개

브라우저 캐시는 HTTP 프로토콜(예: : 만료;캐시 제어 등).

브라우저에 캐시가 없을 때 요청 응답 프로세스

Nginx는 브라우저 캐싱을 제어하고 핫링크를 방지하는 정적 리소스 웹 서비스 역할을 합니다.#🎜🎜 #

브라우저에 캐시가 있는 경우 요청 응답 프로세스

Nginx는 브라우저 캐싱을 제어하고 핫링크를 방지하는 정적 리소스 웹 서비스 역할을 합니다.#🎜🎜 #

브라우저 캐시 확인 만료 메커니즘

만료 여부 확인프로토콜에서 Etag 헤더 정보 확인Last-Modified 헤더 정보 확인Last-Modified

브라우저 요청 프로세스

Nginx는 브라우저 캐싱을 제어하고 핫링크를 방지하는 정적 리소스 웹 서비스 역할을 합니다.

2. Nginx는 브라우저 캐시 구성을 제어합니다.

Nginx는 Cache-Control(max-age) 및 Expires 헤더 정보를 추가하여 브라우저 캐시를 제어합니다.

ngx_http_headers_module

Syntax

Syntax:    expires [modified] time;
        expires epoch | max | off;
Default:    expires off;
Context:    http, server, location, if in location
로그인 후 복사

이 구성 항목은 HTTP 응답의 "Expires" 및 "Cache-Control" 헤더 정보(페이지 캐싱 제어)를 제어할 수 있습니다.

"Expires" 헤더 정보의 만료 시간은 현재 시스템 시간과 사용자가 설정한 시간 값의 합입니다. 수정된 매개변수가 지정된 경우 만료 시간은 파일의 마지막 수정 시간과 사용자가 설정한 시간 값의 합입니다.
"Cache-Control" 헤더의 내용은 지정된 시간의 부호에 따라 달라집니다. 시간 값에는 양수 또는 음수를 사용할 수 있습니다.
시간이 음수인 경우 "Cache-Control: no-cache",
시간이 양수 또는 0인 경우 "Cache-Control: max-age=time" 단위는 초입니다.

epoch 매개변수는 "만료" 값을 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 파일 /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天。

二、防盗链

目的:防止资源被盗用
思路:区别哪些请求是非正常的用户请求

1. 基于http_refer防盗链配置模块

ngx_http_referer_module

语法

Syntax:    valid_referers none | blocked | server_names | string ...;
Default:    —
Context:    server, location
로그인 후 복사

none:请求头中没有 Referer 字段
blocked:请求头中虽然存在“Referer”字段,但是它的值已经被防火墙或代理服务器删除;这些值是不以“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进行访问测试

  • 不带referer,可以正常访问

[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
로그인 후 복사
  • referer为 http://www.baidu.com,返回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
로그인 후 복사
  • 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
로그인 후 복사
로그인 후 복사
  • referer以 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
로그인 후 복사
로그인 후 복사
  • referer为 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
로그인 후 복사
  • referer为 http://www.google.com

4. 컬을 통해 192.168.33.88/hello.txt에 액세스하고 http 응답 헤더 정보를 봅니다.

[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
로그인 후 복사

Expires에 중점을 둡니다. Cache-Control 필드를 보면 hello.txt의 캐시 시간이 1일임을 알 수 있습니다.

2. 안티 핫링크

목적: 리소스 남용 방지
아이디어: 어떤 요청이 비정상적인 사용자 요청인지 구별
🎜🎜1. http_refer 안티 핫링크 구성 모듈을 기준으로🎜🎜🎜 ngx_http_referer_module🎜🎜🎜🎜 구문 🎜🎜rrreee🎜none: 요청 헤더에 Referer 필드가 없습니다. 🎜blocked: 요청 헤더에 "Referer" 필드가 있지만 해당 값은 방화벽이나 프록시 서버에 의해 삭제되었습니다. ​​"http://" 또는 "https://"로 시작하는 문자열은 사용하지 마십시오. 🎜server_names: "Referer" 요청 헤더 필드에는 서버 이름이 포함됩니다. 🎜모든 문자열: 서버 이름 및 선택적 URI를 정의합니다. 접두사. 서버 이름은 시작 또는 끝에 "*"를 포함할 수 있습니다. 확인 시 "Referer" 필드의 서버 포트는 무시됩니다. 🎜정규식: 문자열은 ~로 시작해야 합니다. 정규식은 "http://" 또는 "https://" 뒤의 내용과 일치한다는 점에 유의할 필요가 있습니다. 🎜🎜Example🎜rrreee🎜2.vim conf.d/static.conf🎜🎜rrreee🎜🎜2.nginx -s reload nginx 구성 파일을 다시 로드🎜🎜🎜🎜3. /doc/hello.txt 파일 🎜🎜
  • 🎜vim /vagrant/a/a.txt🎜🎜🎜rrreee🎜🎜4를 사용하여 액세스합니다. test🎜🎜
    • 🎜리퍼러 없이도 정상적으로 접속 가능🎜🎜🎜rrreee
      • 🎜리퍼러는 http://www.baidu.com, 403🎜🎜🎜rrreee
        • 🎜referer는 http://192.168, 정상적으로 액세스할 수 있습니다. 🎜🎜🎜rrreee<ul class=" list-paddingleft-2"><li>🎜referer는 <code>example. 또는 .example.com으로 시작합니다. code> 마지막에 정상적으로 접속이 가능합니다🎜🎜🎜rrreee<ul class=" list-paddingleft-2"><li>🎜추천인은 <code>http://192.168.1.110 입니다. 정상적으로 액세스하세요🎜🎜 🎜rrreee
          • 🎜referer는 http://google.com이며 403🎜🎜🎜rrreee
            • 🎜referer는 http://www.google.com이며 정상적으로 액세스할 수 있습니다. 🎜🎜🎜rrreee🎜추천 관련 기사: 🎜🎜🎜Nginx presents 정적 리소스 웹 서비스로 정적 리소스 압축을 수행합니다🎜🎜🎜🎜
Cache-Control (최대 연령), 만료
Etag#🎜🎜 #

위 내용은 Nginx는 브라우저 캐싱을 제어하고 핫링크를 방지하는 정적 리소스 웹 서비스 역할을 합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿