Nginx Range 캐 시 진행
5137 단어 Nginx
1.1 Nginx 의 Range 리 턴, ngxhttp_slice_module 모듈, -- with - httpslice_모듈 매개 변수
Nginx 의 ngxhttp_slice_module 모듈 은 Range 리 턴 을 지원 하 는 데 사 용 됩 니 다.
ngx_http_slice_모듈 은 Nginx 1.9.8 버 전부터 있 습 니 다.
ngx 사용 하기http_slice_module 모듈 은 Nginx 를 컴 파일 할 때 인 자 를 추가 해 야 합 니 다 -- with - httpslice_module。
1.2 curl 지정 범위
-r. Range 의 범 위 를 지정 합 니 다.
1.3 HTTP 206
HTTP Range 요청, 성공 적 으로 되 돌 아 왔 을 때의 상태 코드 는 206 입 니 다.
1.4 구조
캐 시, 소스 스테이션
사용 자 는 캐 시 에 URL 을 요청 하고 캐 시 는 Range 리 소스 를 진행 합 니 다.
2. 캐 시 프로필
예 1
#user nobody; worker_processes 1;
events { worker_connections 1024; }
http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
keepalive_timeout 65;
#cache proxy_cache_path /data/cache keys_zone=cache_my:100m levels=1:1 inactive=12d max_size=200m;
server { listen 80; server_name localhost;
location / { #slice slice 1k; proxy_cache cache_my; proxy_cache_key $uri$is_args$args$slice_range; add_header X-Cache-Status $upstream_cache_status; proxy_set_header Range $slice_range; proxy_cache_valid 200 206 3h; proxy_pass http://192.168.175.135:80;
proxy_cache_purge PURGE from 127.0.0.1; } } }
예 2
개선 하 나 는 큰 파일 다운로드 라면 파일 의 일부분 을 요청 합 니 다. 전체 파일 을 다운로드 하면 데이터 가 폭발 적 으로 증가 하고 다운로드 가 느 릴 수 있 습 니 다. nginx upstream 도 range 로 백 엔 드 에 요청 하고 이 부분 을 캐 시 디 렉 터 리 에 캐 시 하려 면 어떻게 설정 합 니까?
요청 범위 -- > nginx proxy cache (upteam range) -- > 다운로드 서비스 (캐 시 파일 의 일부분) 위의 nginx 설정 입 니까? no range 부분 을 바 꿉 니 다.
proxy_cache_key $host&uri&is_args&args$http_range; proxy_set_header Range $http_range; proxy_set_header If-Range $http_if_range; proxy_cache_valid 200 206; 테스트, 좋 지 않 습 니 다. range 요청 파일 은 다운로드 할 수 있 지만 캐 시 할 수 없습니다. 어떻게 된 일 인지 봐 야 합 니 다!!
개선 2. 비 Range 요청 캐 시 만 하려 면 range 다운로드 요청 에 캐 시 를 하지 않 으 면 설정 에서 no range 부분 을 바 꿉 니 다.
proxy_cache_key $host&uri&is_args&args; #key 에서 range 정 보 를 캐 시 하지 않 습 니 다 proxy set header Range $http range; proxy set header If - Range $http if range; proxy no cache $http range $http range $http if range; #proxy cache valid 200 설정 추가 하기;
예 3
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
proxy_cache_path /tmp/nginx/cache levels=1:2 keys_zone=cache:100m;
server {
listen 8087;
server_name localhost;
location / {
slice 1m;
proxy_cache cache;
proxy_cache_key $uri$is_args$args$slice_range;
proxy_set_header Range $slice_range;
proxy_cache_valid 200 206 1h;
#proxy_set_header Range $http_range;
proxy_pass http://127.0.0.1:8080;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
뜻밖에 한쪽 이 깜짝 놀 란 것 은 마치 킬러 급 의 특성 과 같다.
우선 Range 요청 이 없 으 면 백 엔 드 큰 파일 이 로 컬 cache 에 있 을 때 설 정 된 slice 크기 에 따라 절편 으로 저 장 됩 니 다.
그 다음 에 Range 요청 이 있 으 면 Nginx 는 적당 한 Range 크기 (slice 경계) 로 백 엔 드 요청 을 합 니 다. 이 크기 는 클 라 이언 트 가 요청 한 Range 와 다 를 수 있 으 며 slice 크기 의 절편 을 로 컬 에 저장 하고 정확 한 206 으로 클 라 이언 트 에 응답 합 니 다.
위 에서 말 한 것 을 주의 하 세 요. Nginx 에서 백 엔 드 까지 의 Range 는 클 라 이언 트 가 요청 한 Range 와 같 지 않 습 니 다. 요청 한 Range 가 어떻든 Nginx 에서 백 엔 드 까지 항상 slice 크기 를 경계 로 하고 클 라 이언 트 요청 을 여러 개의 키 로 나 누 어 백 엔 드 에 요청 합 니 다. 설정 한 slice 의 크기 가 1M, 즉 1024 바이트 라 고 가정 하면 클 라 이언 트 가 Range 를 0 - 1023 범위 내 에서 임 무 를 요청 하면어떤 숫자 가 첫 번 째 절편 에 떨 어 질 지, 요청 한 Range 가 몇 개의 slice 크기 를 가로 지 르 면 nginx 는 백 엔 드 에 여러 개의 키 를 요청 하여 이 slice 를 캐 시 합 니 다. 클 라 이언 트 에 대해 서 는 클 라 이언 트 가 요청 한 Range 를 기준 으로 합 니 다. 요청 중 일부 파일 이 캐 시 되 지 않 았 다 면 Nginx 는 백 엔 드 에 만 요청 이 부족 합 니 다.약간의 절편.
이 모듈 은 하위 요청 을 바탕 으로 이러한 잠재 적 인 문제 가 있 을 수 있 습 니 다. 파일 이 크 거나 slice 가 작 을 때 slice 크기 에 따라 여러 개의 키 로 나 누 어 요청 합 니 다. 이러한 키 요청 은 자신의 자원 을 바로 방출 하지 않 고 파일 설명자 가 소 진 될 수 있 습 니 다.
작은 매듭
정리 하고 주의해 야 할 점:
레 퍼 런 스
https://pureage.info/2015/12/10/nginx-slice-module.html
https://blog.csdn.net/guowenyan001/article/details/50836490
https://blog.csdn.net/orangleliu/article/details/79970131
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
linux2에 nginx 설치설치 가능한 nginx를 확인하고, 해당 nginx를 설치한다. localhost 혹은 해당 ip로 접속을 하면 nginx 화면을 볼 수 있다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.