Nginx 에 리 버스 프 록 시 설정

6481 단어 Nginx
배경
프로젝트 에서 일부 제품 소개 류 그림, 문 서 는 hdfs 에 저장 되 지만 hdfs 의 액세스 속도 가 느 려 인터넷 사용자 의 요 구 를 만족 시 키 지 못 합 니 다. 여 기 는 캐 시 방식 을 사용 하여 nginx 프 록 시 서버 에 파일 캐 시 를 자주 변경 하지 않 고 HDFS 의 읽 기 횟수 를 줄 이 고 사용자 의 접근 속 도 를 높 입 니 다.
Nginx 캐 시 원리
캐 시 기술 의 기본 사상 은 사용자 가 이미 방문 한 내용 을 Nginx 에 복사 본 을 만 드 는 것 입 니 다. 만약 에 한 동안 (캐 시가 만 료 되 지 않 았 음) 이 데 이 터 를 다시 방문 하면 데 이 터 를 가 져 오 라 고 요청 하지 않 아 도 캐 시 에서 이 데 이 터 를 직접 읽 을 수 있 습 니 다. 장점 은 Nginx 와 백 엔 드 서비스 간 의 네트워크 상호작용 을 줄 이 고 네트워크 의 압력 을 줄 일 수 있 습 니 다.또한 데이터 전송 지연 을 줄 일 때 사용자 의 접근 속 도 를 높 일 수 있다.또한 백 엔 드 서비스 에 이상 이 생 겼 을 때 캐 시 를 통 해 해당 사용자 의 요청 을 할 수 있어 백 엔 드 서비스의 안정성 을 높 일 수 있다.[외부 체인 이미지 저장 실패, 원본 사이트 에 도 난 방지 체인 메커니즘 이 있 을 수 있 습 니 다. 그림 을 저장 하여 직접 업로드 하 는 것 을 권장 합 니 다 (img - kUtfe4tx - 1579162275349) (en -resource://database/2234:1)]
프 록 시 캐 시 사용 하기
프 록 시 캐 시 를 사용 하려 면 두 단계 작업 이 필요 합 니 다. 하 나 는 캐 시 일반 설정 을 설정 하 는 것 입 니 다. 하 나 는 경로, 디 렉 터 리 등급, 실효 정책 등 을 포함 하고 다른 하 나 는 해당 하 는 주소 에서 캐 시 를 사용 하 는 것 입 니 다.
proxy 설정cache_path
http 모듈 에 대응 하 는 정 보 를 설정 합 니 다.형식 은 다음 과 같 습 니 다. proxy_cache_path path [levels=levels] keys_zone=name:size [inactive=time] [max_size=size] [loader_files=number] [loader_sleep=time] [loader_threshold=time]; 예제 코드: proxy_cache_path /opt/app/cache_test levels=1:2 keys_zone=cache_test:10m inactive=1d max_size=1g; 매개 변수 설명:
  • path: 캐 시 구역 의 루트 경 로 를 지정 합 니 다. 이 디 렉 터 리 는 자동 으로 만 들 지 않 습 니 다. 미리 만들어 야 합 니 다.
  • levels: 캐 시 파일 디 렉 터 리 차원 을 설정 합 니 다. 기본적으로 모든 캐 시 파일 은 같은 path 매개 변수 경로 에 놓 여 있 지만 캐 시 성능 에 영향 을 줄 수 있 기 때문에 이 경로 아래 에 하위 디 렉 터 리 를 만들어 각각 다른 파일 을 저장 합 니 다.최고 3 층, 층 당 1 - 2 글자 표시.예 를 들 어 1: 1: 2 3 층, 1: 2 는 2 급 목록 을 나타 낸다.levels = 1: 2, Nginx 가 캐 시 할 자원 을 만 드 는 key 를 f4cd0fbc 769 e94925ec5540b6a 4136 d0 이 라 고 가정 하면 key 의 마지막 0, 그리고 마지막 2 - 3 위 6d 를 2 급 하위 디 렉 터 리 로 합 니 다. 즉, 이 자원 은 최종 적 으로 / path / to / cache / 0 / 6d 디 렉 터 리 에 캐 시 됩 니 다
  • .
  • keys_zone: 캐 시 이름과 공유 메모리 크기 를 설정 합 니 다.공유 메모리 에 캐 시 를 저장 할 key 와 metadata (유사 한 사용 횟수) 를 설정 합 니 다. nginx 는 request 가 명중 되 었 는 지, 명중 되 지 않 았 는 지 빠르게 판단 할 수 있 습 니 다. 1m 는 8000 개의 key 를 저장 할 수 있 고 10m 는 80000 개의 key 를 저장 할 수 있 습 니 다.여 cacheitem: 10 m 는 cache 라 는 성명 을 표시 합 니 다.아 이 템 크기 는 10m 입 니 다.크기 를 초과 하면 최초의 데이터 가 삭 제 됩 니 다.
  • inactive: 메모리 에 캐 시 된 만 료 검사 주기.1h: 1 시간;1d: 1 일.예제 설정 에서 지정 한 시간 내 에 접근 하지 않 으 면 상태 가 expired 든 아니 든 캐 시 를 삭제 합 니 다.주의해 야 할 것 은 inactive 와 expired 설정 항목 의 의미 가 다르다 는 것 입 니 다.
  • max_size: 최대 cache 공간 은 지정 되 지 않 으 면 모든 disk space 를 사용 하고 할당량 에 도달 하면 최근 에 가장 적 게 사용 한 cache 파일 을 삭제 합 니 다.
  • use_temp_path: off 라면 nginx 는 temp 대신 캐 시 파일 을 지정 한 cache 파일 에 직접 기록 합 니 다.path 가 지정 한 임시 저장 경로
  • Nginx 가 시 작 된 후 캐 시 로드 프로그램 은 한 번 만 불 러 옵 니 다. 로드 할 때 캐 시 된 메타 데 이 터 를 공유 메모리 영역 에 불 러 옵 니 다. 그러나 캐 시 전체 내용 을 한 번 에 불 러 오 면 Nginx 가 시작 되 기 몇 분 전에 성능 소모 가 심해 져 Nginx 의 성능 이 크게 떨 어 질 수 있 습 니 다.그래서 proxycache_path 명령 에서 캐 시 교체 로드 를 설정 합 니 다.캐 시 교체 로드 총 세 개의 인 자 를 설정 할 수 있 습 니 다:
  • loader_threshold - 교체 의 지속 시간, 밀리초 단위 (기본 값 200)
  • loader_files - 교체 기간 에 불 러 오 는 최대 항목 수 (기본 값 은 100)
  • loader_sleeps - 교체 간 지연 (밀리초 단위) (기본 값 50)
  • proxy 설정cache
    대응 하 는 location 노드 에서 캐 시 를 사용 합 니 다.매개 변수 설명:
  • proxy_cache: http 세그먼트 에 대응 하 는 keyzone, 당신 이 정의 한 proxycache 가 사용 하 는 공유 공간의 이름 은 cache 로 정의 되 어 있 습 니 다.test, 그래서 여기 도 cache 라 고 쓰 여 있 습 니 다.test。
  • proxy_cache_valid: 지정 한 HTTP 상 태 를 캐 시 하고 캐 시 시간 을 지정 합 니 다.여러 설정 항목 을 사용자 정의 로 쓸 수 있 습 니 다.여기 서 우 리 는 200 과 304 의 리 턴 코드 캐 시 를 12 시간 동안 캐 시 합 니 다.나머지 캐 시 10 분
  • proxy_cache_key: 웹 캐 시의 Key 값, Nginx 는 Key 값 md5 해시 에 따라 캐 시 캐 시 를 저장 합 니 다. isargs: $args 가 설정 되면 값 은 "?" 이 고 그렇지 않 으 면 "
  • 입 니 다.
  • proxy_next_upstream 요청 서버 에 오류 가 발생 하거나 시간 이 초과 되면 다음 서버
  • 로 시도 합 니 다.
    예시
    location / {
        proxy_pass http://slbserver_cache; #  upstrean               
        proxy_redirect off ;
        proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #            ,          
        proxy_connect_timeout 300;
        #         ,                     
        proxy_send_timeout 300;
        #                 ,               
        proxy_read_timeout 600;
        #       ,           nginx    
        proxy_buffer_size 256k;
        #  ,  nginx       buffer       
        proxy_buffers 4 256k;
        #               proxy_buffers
        proxy_busy_buffers_size 256k;
        #proxy         
        proxy_temp_file_write_size 256k;
        #           500,400      ,       
        proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
        proxy_max_temp_file_size 128m;
        
        #  Web   cache_test,proxy_cache_path         ,     off。
        proxy_cache cache_test ;
        #   HTTP              
        proxy_cache_valid 200 304 1m ; 
        #  Web   Key ,Nginx  Key md5      ,    "  ,URI,#  "   Key
        proxy_cache_key $uri$is_args$args;
     }
    

    http 헤드 에 나타 나 고 nginx 로그 에서 캐 시 명중 상황 을 봅 니 다.
    location 설정 에 추가: add_header  Nginx-Cache "$upstream_cache_status"; nginxlog 에 추가: log_format       combinedio  …$upstream_cache_status;원리: nginx $upstream 이용cache_status 변수, 이 변 수 는 캐 시 명중 상 태 를 대표 합 니 다. 상 태 는 다음 과 같 습 니 다.
  • MISS: 명중 하지 않 았 습 니 다. 배경 으로 전송 요청;
  • HIT: 캐 시 적중;
  • EXPIRED: 캐 시가 만 료 되 었 습 니 다. 배경 으로 전송 요청 합 니 다.
  • UPDATING: 캐 시 를 사용 하고 있 습 니 다. 새로운 응답 을 사용 합 니 다.
  • STALE: 백 엔 드 에서 만 료 된 응답 을 받 습 니 다.

  • 질문: 설정 성공 후 계속 miss 표시
    설정 이 끝 난 후에 캐 시 에 miss 가 계속 표 시 됩 니 다. 보통 두 가지 이유 로 이 문 제 를 일 으 키 는 것 을 발견 합 니 다.
    1. 잘못된 헤더 가 포 함 된 메 시 지 를 되 돌려 줍 니 다.
    정보 Cache-ControlSet-Cookie 를 되 돌려 줍 니 다.nginx 에서 proxy 를 통과 할 수 있 습 니 다.ignore_headers 설정 은 다음 과 같이 무시 합 니 다.
    server {
        listen       80;
        listen       [::]:80;
        server_name          ;
        location / {
            ......
            proxy_ignore_headers Set-Cookie Cache-Control;
            proxy_hide_header Cache-Control;
            proxy_hide_header Set-Cookie;
            ......
        }
    }
    

    2. 응답 내용 의 버퍼 를 닫 아서 정 보 를 캐 시 할 수 없습니다.
    캐 시 를 열 어야 합 니 다. proxy_buffering 을 on 으로 설정 합 니 다.예:
    location ~ (^/).*\.(gif|jpg|jpeg|png|js|css|html|cab|bmp)${
        ......
        proxy_buffering on;
        ......
    }
    

    참고:
    Nginx proxy_cache 캐 시 설정 Nginx 캐 시 원리 및 메커니즘 Nginx 실전 - 캐 시 서비스 proxy (1) Nginx 캐 시 서비스
    Nginx 의 proxy cache MISS 문 제 는 nginx 의 역방향 프 록 시 캐 시 가 작 동 하지 않 는 문 제 를 해결 합 니 다.

    좋은 웹페이지 즐겨찾기