nginx (3): 역방향 대리 편

1. nginx 역방향 에이전트 모듈
무엇이 역방향 대리 입 니까?클 라 이언 트 요청 을 받 고 요청 을 백 엔 드 서버 에 맡 기 고 백 엔 드 서버 처리 가 완료 되면 응답 은 역방향 프 록 시 서버 를 통 해 클 라 이언 트 에 게 돌아 갑 니 다.역방향 프 록 시 는 랜 의 서버 가 네트워크 의 클 라 이언 트 에 의 해 접근 할 수 있 고 여러 대의 서버 간 에 부하 균형 을 이 룰 수 있다.모듈: ngxhttp_proxy_module
1.1 proxy_pass
역할 영역 상황: location, if in location, limitexcept
syntax:proxy_pass URL;

핵심 명령, 이 명령 은 프 록 시 서버 주소 로 설정 되 어 있 습 니 다. URL 은 호스트 이름, IP, IP 포트 등 형식 이 고 전송 프로 토 콜 http: / 또는 https: / / 주의해 야 할 경우 URL 에 uri 가 포함 되 어 있 거나 포함 되 어 있 지 않 습 니 다. nginx 는 처리 방식 이 다른 설정 예제 입 니 다. 상황 1: URL 에 uri 가 포함 되 어 있 지 않 습 니 다.
server {
                    ...
                    server_name www.cutemsyu.com;
                    location /uri/ {
                        proxy_pass http://192.168.100.1:8080;
                    }
                    ...
                }
nginx            , location  uri                        
      http://www.cutemsyu.com/uri --> http://192.168.100.1:8080/uri

상황 2: URL 에 uri 포함
server {
                    ...
                    server_name www.cutemsyu.com;
                    location /uri/ {
                        proxy_pass http://192.168.100.1:8080/new_uri/;
                    }
                    ...
                }
nginx            , location  uri   proxy_pass   URL   uri            
      http://www.cutemsyu.com/uri --> http://192.168.100.1:8080/new_uri

상황 3: location 에서 정의 한 uri 가 정규 방식 을 사용 하면 URL 에 uri 를 가 져 올 수 없습니다.
1.2 proxy_set_header field
역할 영역 컨 텍스트: http, server, location
syntax:proxy_set_header field value;

백 엔 드 서버 에 보 낼 요청 메시지 의 첫 번 째 값 을 설정 합 니 다. 이 명령 을 사용 하여 클 라 이언 트 IP 를 백 엔 드 서버 에 로그 형식 으로 기록 합 니 다. 구체 적 인 방법 은 다음 과 같 습 니 다.
proxy_set_header X-Real-IP $remote_addr
                IP      X-Real-IP  

1.3 시간 초과 명령
역할 영역 컨 텍스트: http, server, location
  • proxy_connect_timeout time;백 엔 드 서버 와 연결 하 는 시간 초과, 기본 60s
  • 를 정의 합 니 다.
  • proxy_read_timeout time;keepalived 관련.백 엔 드 서버 응답 간격 을 정의 하 는 시간 초과 입 니 다. 전체 응답 을 읽 는 시간 이 아 닙 니 다. 이 시간 동안 전송 동작 이 없 으 면 연결 을 끊 습 니 다. 기본 60s
  • proxy_send_timeout time;keepalived 관련.백 엔 드 서버 에 요청 을 보 내 는 간격 이 시간 초과 로 정 의 됩 니 다. 전체 요청 을 보 내 는 시간 이 아 닙 니 다. 이 시간 동안 전송 동작 이 없 으 면 연결 을 끊 습 니 다. 기본 60s
  • 1.4 proxy_ignore_client_abort
    역할 영역 컨 텍스트: http, server, location
    syntax:proxy_ignore_client_abort on | off;

    nginx 와 백 엔 드 서버 의 연결 이 중단 되 었 는 지 정의 합 니 다. 클 라 이언 트 가 응답 결 과 를 기다 리 지 않 으 면 연결 을 중단 합 니 다.이 명령 의 기본 값 은 off 입 니 다. 클 라 이언 트 가 연결 을 중단 하면 nginx 와 백 엔 드 연결 이 중단 되 고 nginx 는 5XX 의 오 류 를 기록 합 니 다. 일반적으로 이러한 오 류 는 조사 하기 어렵 습 니 다. 이 값 이 on 으로 설정 되 었 을 때 nginx 는 백 엔 드 서버 와 의 연결 을 미리 중단 하지 않 고 돌아 오 는 상태 코드 는 200 등 nginx 로그 에 도 이상 한 5XX 오류 가 발생 하지 않 습 니 다.
    2. nginx 서버 그룹의 설정
    모듈 ngxhttp_upstream_module 이 모듈 정 의 는 proxypass, fastcgi_pass, uwsgi_pass, scgi_pass, and memcached_pass 등 명령 이 인 용 된 서버nginx 는 역방향 프 록 시 서버 로 서 부하 균형 을 이 루 기 위해 항상 서버 를 설정 해 야 합 니 다.서버 를 정의 할 때 기본 스케줄 링 알고리즘 은 폴 링 알고리즘 입 니 다. nginx 는 받 은 요청 폴 링 을 각 백 엔 드 서버 에 보 내 처리 하고 서버 성능 에 따라 가중치 를 증가 하거나 다른 스케줄 링 알고리즘 을 사용 할 수 있 습 니 다.
    2.1 upstream 설정 블록
    우선 http 설정 블록 에 새 설정 컨 텍스트 upstream 을 만 들 고 이름 을 짓 습 니 다.
    http{
        ...
        upstream group_name {
            ...
            ...
        }
        ...
    }

    다음은 upstream 에서 사용 할 수 있 는 명령 을 소개 합 니 다.
    2.2 서버 명령
    syntax:server address [parameters...];

    server 명령 은 핵심 명령 입 니 다. 그룹 구성원 address 는 형식 을 표시 할 수 있 습 니 다.
  • IP[: PORT]
  • HOSTNAME [ : PORT]
  • unix: /PATH/TO/SOME_SOCK_FILE

  • parameters 는 다음 과 같이 사용 할 수 있 습 니 다:
  • weight = number 는 server 의 가중치 를 정의 합 니 다. 기본 값 은 1 입 니 다.가중치 가 높 은 server 는 요청 을 우선 처리 하고 더 많은 요청 을 할당 합 니 다. 즉, 가중치 가 있 는 폴 링 스케줄 입 니 다.
  • max_fails = number 는 서버 가 한 동안 가장 큰 요청 에 실패 한 횟수 를 정의 합 니 다. 이 값 을 초과 하면 서버 가 서비스 제공 을 무효 로 중지 하 는 것 을 표시 합 니 다
  • fail_timeout = time 은 두 가지 의미 가 있 습 니 다. 1. 이 시간 초과 시간 은 max 입 니 다.fails 가 언급 한 시간.2. 서버 표시 가 잘못 되면 이 기간 동안 검색 하지 않 습 니 다.기본 값 10s
  • backup 은 서버 를 예비 서버 로 표시 하고 다른 서버 가 사용 할 수 없 을 때 만 이 서버 를 사용 합 니 다
  • down 태그 server 가 잘못 되 었 습 니 다.일반적으로 서 비 스 를 업그레이드 할 때 그 레이스 케 일 모델 로 서버 를 하나씩 온라인 에서 이탈 시킨다.

  • 2.3 몇 개의 스케줄 링 알고리즘
    기본 폴 링 알고리즘 을 제외 하고 다음 과 같은 알고리즘 을 사용 할 수 있 습 니 다. 사용 방법 은 간단 합 니 다. upstream 에 직접 추가 합 니 다.
  • least_conn 은 서버 의 스케줄 링 알고리즘 을 최소 연결 수 스케줄 링 으로 정의 합 니 다.server 가 만 든 이벤트 연결 수량 에 따라 요청 을 할당 하고 최소 연결 을 가 진 server 우선 배분 합 니 다.이 알고리즘 가중치 유효
  • ip_hash 소스 주소 hash 스 케 쥴 링 알고리즘 은 같은 IP 에서 요청 하면 항상 같은 server 에 분 배 됩 니 다.이 알고리즘 은 비교적 굵 은 입도 에서 세 션 의 점성 을 실현 하고 세 션 유지 기능 을 실현 할 수 있 으 나 일반적으로 사용 하지 않 습 니 다.
  • hash key [ consistent ]; 지정 한 key 의 hash 표를 기반 으로 요청 에 대한 스케줄 링 을 실현 합 니 다. 같은 종류의 요청 을 같은 server 에 보 냅 니 다. key 는 텍스트, 변수 또는 양자 로 조합 할 수 있 습 니 다.

  • consistent 인 자 를 선택 할 수 있 습 니 다. 일치 성 hash 알고리즘 을 말 합 니 다. 이 인 자 를 사용 하면 서버 가 server 를 사용 할 때 hash 대응 표 에 큰 변동 이 발생 하고 영향 범 위 를 줄 일 수 있 습 니 다.예시:
    hash $request_uri consistent; #hash  uri     ,      hash  

    2.4 서버 그룹 이 남 은 연결 수 유지
    syntax:keepalive connections;

    이 명령 은 모든 워 커 프로 세 스 를 서버 그룹 으로 유지 하 는 남 은 연결 수량 상한 선 을 설정 합 니 다.connections 는 설정 한 수량 입 니 다. 이 수량 은 너무 많 으 면 안 됩 니 다. 새로운 네트워크 연결 을 방지 하기 위해 이 명령 을 사용 하 는 것 이 귀 찮 습 니 다. 홈 페이지 의 예 를 참고 하면 다음 과 같 습 니 다.
    #http         ,    1.1,  Connection   
    upstream http_backend {
        server 127.0.0.1:8080;
    
        keepalive 16;
    }
    
    server {
        ...
    
        location /http/ {
            proxy_pass http://http_backend;
            proxy_http_version 1.1;
            proxy_set_header Connection "";
            ...
        }
    }
    
    #FastCGI     ,   fastcgi_keep_conn on
    upstream fastcgi_backend {
        server 127.0.0.1:9000;
    
        keepalive 8;
    }
    
    server {
        ...
    
        location /fastcgi/ {
            fastcgi_pass fastcgi_backend;
            fastcgi_keep_conn on;
            ...
        }
    }
    

    3. nginx 에이전트 버퍼
    proxy buffer 를 사용 하면 nginx 는 백 엔 드 서버 가 돌아 온 데 이 터 를 클 라 이언 트 에 비동기 로 전달 합 니 다.nginx 는 우선 백 엔 드 서버 로부터 응답 데 이 터 를 받 아 버퍼 에 저장 하고, 수신 데이터 가 버퍼 크기 를 초과 하면 로 컬 정의 임시 파일 에 저장 합 니 다.데이터 가 수신 되 거나 버퍼 에 데 이 터 를 가득 채 우 면 클 라 이언 트 에 데 이 터 를 보 냅 니 다.모든 buffer 가 데 이 터 를 가득 채 운 후에 클 라 이언 트 에 데 이 터 를 보 낼 때 까지 buffer 는 busy 상태 에 있 고 그 동안 다른 작업 을 하 는 데 실패 합 니 다.다음 명령 역할 영역 내용: http, server, location
    3.1 proxy_buffering
    syntax: proxy_buffering on | off;

    프 록 시 버퍼 제어 명령, 기본 오픈
    3.2 proxy_buffers
    syntax: proxy_buffers number size;

    이 명령 은 백 엔 드 서버 와 연 결 된 buffer 수 를 설정 합 니 다. 각각 buffer 크기 입 니 다.보통 size 는 메모리 페이지 크기 입 니 다.백 엔 드 서버 데이터 버퍼 의 총 크기 는 number * size 입 니 다.
    3.3 proxy_busy_buffers_size
    syntax: proxy_busy_buffers_size size;

    이 명령 은 busy 상태 에 있 는 buffer 의 총 크기 를 설정 합 니 다.기본 값 proxybuffers 에서 정의 하 는 size 의 두 배 입 니 다.
    3.4 proxy_temp_path
    syntax: proxy_temp_path path [level1 [level2 [level3]]];

    이 명령 은 백 엔 드 서버 가 부피 가 큰 데 이 터 를 응답 하 는 임시 파일 의 저장 경 로 를 설정 합 니 다 Example:
    proxy_temp_path /spool/nginx/proxy_temp 1 2;

    3.5 proxy_max_temp_file_size
    syntax: proxy_max_temp_file_size size;

    이 명령 은 임시 파일 이 공간 을 차지 하 는 총 크기 를 설정 합 니 다.
    4. nginx 프 록 시 캐 시
    nginx 는 전문 적 인 캐 시 서버 가 아니 라 varnish 등 서비스 가 더욱 효율 적 이지 만 nginx 의 캐 시 기능 은 일부 장면 에서 도 좋 은 효 과 를 발휘 할 수 있 습 니 다.이전 소절 에서 우 리 는 nginx 버퍼 에 대해 말 했 습 니 다. 버퍼 는 서로 다른 전송 효율 을 가 진 장치 간 의 전송 을 조율 하고 효율 이 높 은 측의 대기 시간 을 낮 추기 위해 서 입 니 다.이 섹 션 의 캐 시 는 응답 클 라 이언 트 의 속 도 를 높이 기 위해 자주 방문 하 는 데 이 터 를 로 컬 에 캐 시 합 니 다. 클 라 이언 트 가 같은 자원 에 접근 할 때 로 컬 에 저 장 된 내용 을 클 라 이언 트 에 직접 응답 하여 백 엔 드 서버 에 대한 압력 을 줄 이 고 응답 속 도 를 높 입 니 다.동시에 nginx 의 버퍼 기능 은 nginx 버퍼 에 의존 합 니 다.
    4.1 proxy_cache
    syntax: proxy_cache zone|off;

    이 명령 은 공용 캐 시 영역 이름 을 설정 하거나 캐 시 기능 을 닫 습 니 다.캐 시 영역 에 캐 시 된 색인 데 이 터 를 저장 합 니 다.
    4.2 proxy_cache_key
    syntax: proxy_cache_key string;

    색인 을 만 드 는 데 사용 할 "키" 의 기본 값 을 proxy 로 정의 합 니 다.cache_key $scheme$proxy_host$request_uri;
    4.3 proxy_cache_path
    특히 이 명령 의 역할 영역 을 지적 합 니 다. Context: http
    syntax:proxy_cache_path path [levels=levels]  keys_zone=name:size;

    이 명령 은 캐 시 데이터 의 저장 경로 와 캐 시 색인 에 관 한 내용 을 정의 합 니 다.명령 이 복잡 합 니 다. 위의 용법 은 축소판 입 니 다. 설정 해 야 할 인 자 를 유지 하고 다른 기본 값 을 유지 하면 됩 니 다.매개 변수 의미:
  • path 정의 저장 루트 경로
  • levels = levels 는 path 경로 와 상대 적 으로 몇 번 째 hash 경로 에서 캐 시 데 이 터 를 정의 합 니 다
  • keys_zone = name: size 는 캐 시 인덱스 가 저 장 된 영역 과 사용 크기 를 정의 합 니 다
  • 4.4 proxy_cache_min_uses
    syntax: proxy_cache_min_uses number;

    이 명령 은 자원 이 최소 몇 번 방문 되 는 지 캐 시 를 정의 합 니 다. 기본 값 은 1 입 니 다.
    4.5 proxy_cache_use_stale
    syntax:proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ...;

    이 명령 은 nginx 가 백 엔 드 서버 에 접근 하 는 과정 에서 접근 할 수 없 거나 접근 오류 등 이 발생 하면 어떤 상태 에서 nginx 가 캐 시 데 이 터 를 사용 하여 이번 클 라 이언 트 요청 에 응답 할 수 있 는 지 정의 합 니 다.캐 시 된 데이터 가 만 료 되 었 을 수도 있 지만 사이트 의 가용성 에 있어 서 는 의미 가 크다.기본 값 은 off 입 니 다.
    4.6 proxy_cache_valid
    syntax:proxy_cache_valid [code...] time;

    이 명령 은 http 응답 상태 에 따라 캐 시 시간 을 설정 합 니 다.
    4.7 proxy_no_cache
    syntax:proxy_no_cache sting;

    이 명령 은 응답 데 이 터 를 캐 시 하지 않 는 상황 을 정의 합 니 다.string 에서 정 의 된 값 은 여러 개 일 수 있 습 니 다. 값 이 비어 있 거나 0 이 아 닐 때 데 이 터 를 캐 시 하지 않 습 니 다.string 값 은 보통 http 프로 토 콜 의 캐 시 제어 클래스 의 첫 번 째 부분 입 니 다.
    4.8 하나의 설정 사례
    http {
        ...
        proxy_cache_path /var/cache/nginx/proxy_cache levels=1:1:1 keys_zone=ncache:256m ;
        ...
    }
    
    location / {
        ...
        proxy_cache ncache;
        proxy_cache_valid 200 302 301 1h;
        proxy_cache_valid any 1m;
        proxy_no_cache $cookie_nocache;
        ...
    }
    

    5. nginx 의 fastcgi 모듈
    nginx 는 에이전트 fastcgi 프로 토 콜 의 요청 을 되 돌 릴 수 있 습 니 다. 이 절 은 하나의 예 를 통 해 구체 적 으로 사용 할 수 있 습 니 다.
    location ~ *. php ${\ # 우선 php 동적 요청 과 일치 합 니 다.
                    fastcgi_pass   127.0.0.1:9000;   #         
                    fastcgi_index  index.php;          #        
                    fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;   #  php     fastcgi   
                    include        fastcgi_params; #  nginx           
                }
    

    6. 종결 어
    지금까지 nginx 세 편의 글 이 끝 났 습 니 다. 여러분 의 소장 관심 을 환영 합 니 다.

    좋은 웹페이지 즐겨찾기