1.25 - 1.27 Nginx 역방향 에이전트 - buffer 와 proxycache, Nginx 부하 균형

1.25 - 1.26 Nginx 역방향 에이전트 - buffer 와 proxycache
1.25 nginx 역방향 에이전트 - buffer
버퍼 와 캐 시https://coding.net/u/aminglinux/p/nginx/git/blob/master/proxy/bu_ca.md 
buffer 와 cache 의 차이
cache: 캐 시
버퍼: 버퍼, 데이터 가 디스크 에 기록 되면 두 가지 상황 이 발생 합 니 다.
  •  데이터 가 생기 면 디스크 에 기록 합 니 다.
  •  데 이 터 를 메모리 에 임시로 기록 하고 어느 정도 모 으 면 디스크 에 기록 합 니 다.

  • 예 를 들 어 설명:
    택배 로 예 를 들 면 두 가지 상황.
  • 1 택배 가 배달 센터 에 도착 할 때마다 택배 기 사 는 바로 배달한다.
  • 2 택배 품 이 배 송 센터 에 도착 하면 택배 품 이 일정 수량 이나 시간 에 이 르 면 택배 기 사 는 하나씩 배 송 을 진행한다.
  • 첫 번 째 상황 은 buffer 에 해당 합 니 다. 두 번 째 상황 은 cache 에 해당 합 니 다.
  • 1.26 proxy_cache
    cache: 캐 시
    핵심 점
  • proxy_cache
  • proxy_cache_path

  • 1.27 Nginx 부하 균형
    https://coding.net/u/aminglinux/p/nginx/git/blob/master/proxy/lb.md 
    ip hash 의 특성:
  • 소스 IP 를 대응 하 는 ip hash 목록 에 기록 합 니 다. 예 를 들 어 웹 server 세 대: C1, C2, C3 는 A 가 처음으로 피드백 정 보 를 방문 한 것 은 C1 입 니 다. 그 후에 C1 은 A 의 데 이 터 를 받 고 피드백 합 니 다.
  • Nginx 의 부하 균형 설정
    Nginx 는 upstream 과 proxy 를 통 해패스 는 부하 균형 을 이 루 었 다.본질 적 으로 도 Nginx 의 역방향 프 록 시 기능 으로 백 엔 드 서버 가 여러 개 에 불과 합 니 다.
    사례 1 (간단 한 폴 링)
    upstream www {
        server 172.37.150.109:80;
        server 172.37.150.101:80;
        server 172.37.150.110:80;
    }
    server {
        listen 80;
        server_name www.aminglinux.com;
        location / {
            proxy_pass http://www/;
            proxy_set_header Host   $host;
            proxy_set_header X-Real-IP      $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

    설명: 프 록 시 된 기계 가 여러 대 일 때 upstream 을 사용 하여 서버 그룹 을 정의 해 야 합 니 다.
    그 중 ww 이름 은 사용자 정의 가 가능 합 니 다. 뒤에 있 는 proxy패스 에서 인용 합 니 다.
    이렇게 nginx 는 ww 그룹 내 세 대의 서버 에 균형 있 게 문의 할 것 입 니 다.
    사례 2 (가중치 폴 링 + ip hash 알고리즘)
    upstream www {
        server 172.37.150.109:80 weight=50;
        server 172.37.150.101:80 weight=100;
        server 172.37.150.110:80 weight=50;
        ip_hash;
    }
    server {
        listen 80;
        server_name www.aminglinux.com;
        location / {
            proxy_pass http://www/;
            proxy_set_header Host   $host;
            proxy_set_header X-Real-IP      $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

    설명: ww 팀 내 세 대의 기계 에 가중치 를 설정 할 수 있 고 가중치 가 높 을 수록 배정 하 는 요청 이 많 습 니 다.
    ip_hash 는 nginx 부하 균형 알고리즘 으로 원리 가 간단 합 니 다. 요청 에 속 한 클 라 이언 트 IP 에 따라 수 치 를 계산 한 다음 에 요청 을 이 수치 에 대응 하 는 백 엔 드 로 보 냅 니 다.
    그래서 같은 클 라 이언 트 의 요청 은 같은 백 엔 드 로 보 냅 니 다. 이 백 엔 드 가 사용 되 지 않 는 한.ip_hash 는 세 션 을 유지 하 는 효과 가 있 습 니 다.
    사례 3 (upstream 기타 설정)
    upstream www {
            server 172.37.150.109:80 weight=50 max_fails=3 fail_timeout=30s;
            server 172.37.150.101:80 weight=100;
            server 172.37.150.110:80 down;
            server 172.37.150.110:80 backup;
    }
    server
    {
        listen 80;
        server_name www.aminglinux.com;
        location / {
            proxy_next_upstream off;
            proxy_pass http://www/;
            proxy_set_header Host   $host;
            proxy_set_header X-Real-IP      $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

    설명:
  • down 은 현재 server 가 부하 균형 에 참여 하지 않 음 을 나타 낸다.
  • backup 은 예약 한 기 계 를 위해 다른 server (비 backup) 가 고장 나 거나 바 쁠 때 만 backup 기 계 를 요청 합 니 다.
  • max_fails, 요청 실패 횟수 를 허용 합 니 다. 기본 값 은 1 입 니 다.실패 횟수 가 이 값 에 이 르 렀 을 때 이 기계 다운 이 떨 어 졌 다 고 생각 합 니 다.실패 의 지 표 는 proxynext_upstream 모듈 은 404 상태 코드 가 실패 라 고 생각 하지 않 습 니 다.
  • fail_timeount, 실패 의 시간 초과 정의, 즉 이 시간 내 에 maxfails 야 말로 진정한 실패 다.기본 값 은 10 초 입 니 다.
  • proxy_next_upstream, 백 엔 드 서버 를 통 해 돌아 오 는 응답 상태 코드 는 서버 가 죽 었 음 을 나타 내 며 백 엔 드 기기 가 배포 목록 에 가입 하 는 지 여 부 를 유연 하 게 제어 할 수 있 습 니 다.proxynext_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 |http_404 | off ...; 기본 값: proxynext_upstream error timeout
  • error      # 백 엔 드 서버 와 연결 할 때 나 백 엔 드 서버 에 요청 을 보 낼 때 나 백 엔 드 서버 에서 응답 헤드 를 받 을 때 오류 가 발생 합 니 다
  • timeout    # 백 엔 드 서버 와 연결 할 때 나 백 엔 드 서버 에 요청 을 보 낼 때 나 백 엔 드 서버 에서 응답 헤드 를 받 을 때 시간 초과
  • invalid_header  # 백 엔 드 서버 가 빈 응답 이나 불법 응답 헤드 를 되 돌려 줍 니 다
  • http_500   # 백 엔 드 서버 가 되 돌아 오 는 응답 상태 코드 는 500
  • 입 니 다.
  • http_502   # 백 엔 드 서버 가 되 돌아 오 는 응답 상태 코드 는 502
  • 입 니 다.
  • http_503   # 백 엔 드 서버 가 되 돌아 오 는 응답 상태 코드 는 503
  • 입 니 다.
  • http_504   # 백 엔 드 서버 가 되 돌아 오 는 응답 상태 코드 는 504
  • 입 니 다.
  • http_404   # 백 엔 드 서버 가 되 돌아 오 는 응답 상태 코드 는 404
  • 입 니 다.
  • off        # 다음 백 엔 드 서버 에 요청 보 내기 중지
  • 사례 4 (서로 다른 uri 에 따라)
      upstream aa.com {         
                          server 192.168.0.121;
                          server 192.168.0.122;  
         }
        upstream bb.com {  
                           server 192.168.0.123;
                           server 192.168.0.124;
        }
        server {
            listen       80;
            server_name  www.aminglinux.com;
            location ~ aa.php
            {
                proxy_pass http://aa.com/;
                proxy_set_header Host   $host;
                proxy_set_header X-Real-IP      $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            }
            location ~ bb.php
            {
                  proxy_pass http://bb.com/;
                  proxy_set_header Host   $host;
                  proxy_set_header X-Real-IP      $remote_addr;
                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            }
            location /
            {
                  proxy_pass http://bb.com/;
                  proxy_set_header Host   $host;
                  proxy_set_header X-Real-IP      $remote_addr;
                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            }
    }

    설명: aa. php 를 요청 하 는 사람 은 aa. com 그룹 에 갑 니 다. bb. php 를 요청 하 는 사람 은 bb. com 에 갑 니 다. 다른 요청 은 모두 bb. com 에 갑 니 다.
    사례 5 (디 렉 터 리 에 따라)
    upstream aaa.com
    {
                server 192.168.111.6;
    }
    upstream bbb.com
    {
                server 192.168.111.20;
    }
    server {
            listen 80;
            server_name www.aminglinux.com;
            location /aaa/
            {
                proxy_pass http://aaa.com/aaa/;
                proxy_set_header Host   $host;
                proxy_set_header X-Real-IP      $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            }
            location /bbb/
            {
                proxy_pass http://bbb.com/bbb/;
                proxy_set_header Host   $host;
                proxy_set_header X-Real-IP      $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            }
            location /
            {
                proxy_pass http://bbb.com/;
                proxy_set_header Host   $host;
                proxy_set_header X-Real-IP      $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            }
    }

    좋은 웹페이지 즐겨찾기