Nginx Range 캐 시 진행

5137 단어 Nginx
1. Range 리 턴
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 크기 에 따라 여러 개의 키 로 나 누 어 요청 합 니 다. 이러한 키 요청 은 자신의 자원 을 바로 방출 하지 않 고 파일 설명자 가 소 진 될 수 있 습 니 다.
작은 매듭
정리 하고 주의해 야 할 점:
  • 이 모듈 은 proxy cache 큰 파일 의 장면 에 사용 되 며 큰 파일 절편 캐 시
  • 컴 파일 시 configure 에 – with - http slice module 인자
  • $slice range 는 반드시 proxy cache key 에 추가 하고 proxy set header 를 사용 하여 Range 헤드 로 백 엔 드 에 전달 해 야 합 니 다
  • 파일 크기 에 따라 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

    좋은 웹페이지 즐겨찾기