Last-Modified |
|
브라우저 요청 프로세스
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
로그인 후 복사
重点查看 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”字段,但是它的值已经被防火墙或代理服务器删除;这些值是不以“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
文件
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
로그인 후 복사
[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
로그인 후 복사
[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
로그인 후 복사
로그인 후 복사
[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
로그인 후 복사
[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
로그인 후 복사
로그인 후 복사
[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
로그인 후 복사
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 정적 리소스 웹 서비스로 정적 리소스 압축을 수행합니다🎜🎜🎜🎜