Nginx 튜 토리 얼 \ # 1: 기본 개념

9357 단어
간단 한 소개
어이!나 눔 은 관심!그래서 우 리 는 당신 과 약간의 지식 을 더 나 누고 싶 습 니 다.우 리 는 3 절 로 나 뉘 는 이 'Nginx 튜 토리 얼' 을 준비 했다.만약 당신 이 Nginx 에 대해 이미 알 고 있 거나, 더 많은 것 을 알 고 싶다 면, 이 강 좌 는 당신 에 게 매우 도움 이 될 것 입 니 다.
우 리 는 Nginx 가 어떻게 일 하 는 지, 그 뒤의 개념 이 어떤 것 이 있 는 지, 그리고 응용 프로그램의 성능 을 향상 시 키 는 방법 을 알려 줄 것 이다.어떻게 설치 하고 어떻게 시작 하고 운행 하 는 지 알려 줄 게.
이 강 좌 는 3 절 을 포함한다.
  • 기본 개념 - 명령 (directive) 과 환경 (context) 의 차이, 계승 모드, 그리고 Nginx 가 서버 블록 을 선택 하 는 순서, 그리고 설치 위 치 를 알 수 있 습 니 다.
  • 성능 관리 - 속 도 를 높이 는 비결.gzip, 캐 시, 버퍼, 시간 초과 설정 에 대해 설명 하 겠 습 니 다.
  • SSL 설정 - 내용 을 HTTPS 로 제공 하 는 설정 절 차 를 설명 합 니 다.

  • Google 의 목 표 는 gzip, SSL 등 특정 테마의 정확 한 설정 을 쉽게 찾 을 수 있 도록 일련의 튜 토리 얼 을 만 들 거나 그 설정 을 직접 탐색 하 는 것 입 니 다.최고의 학습 체험 을 얻 기 위해 서 는 자신의 기계 에 Nginx 를 설치 하고 직접 실전 을 해 보 는 것 을 권장 합 니 다.
    Nginx 가 뭐 예요?
    Nginx 는 처음에 웹 서버 로 만 들 어 졌 습 니 다. 해결 에 사 용 됩 니 다. C10k 라 는 질문 을 던 졌 다.웹 서버 로 서 놀 라 운 속도 로 데이터 서 비 스 를 제공 할 수 있 습 니 다.그러나 Nginx 는 웹 서버 뿐만 아니 라 역방향 프 록 시 로 도 사용 할 수 있 습 니 다. 느 린 상류 서버 (예: 유 니 콘) 와 도 사용 할 수 있 습 니 다. 혹시 Puma) 쉽게 집성.트 래 픽 (부하 이퀄 라이저), 스 트림 미디어, 동적 으로 이미지 크기 조정, 캐 시 내용 등 을 적 절 히 분배 할 수 있 습 니 다.
    기본 적 인 nginx 시스템 구 조 는 master 프로 세 스 와 워 커 프로 세 스 로 구성 되 어 있 습 니 다.master 는 설정 파일 을 읽 고 워 커 프로 세 스 를 유지 하 며 워 커 는 요청 을 실제 처리 합 니 다.
    기본 명령
    nginx 를 시작 하려 면 입력 만 하면 됩 니 다:
    [sudo] nginx

    nginx 인 스 턴 스 가 실 행 될 때 해당 하 는 신 호 를 보 내 서 관리 할 수 있 습 니 다.
    [sudo] nginx -s signal

    사용 가능 한 신호:
  • stop - 빠르게 닫 기
  • quit - 우아 하 게 닫 기 (워 커 스 레 드 처리 대기)
  • reload - 프로필 다시 불 러 오기
  • reopen - 로그 파일 다시 열기
  • 명령 과 문맥
    nginx 설정 파일, 기본 위 치 는 다음 과 같 습 니 다.
  • /etc/nginx/nginx.conf ,
  • /usr/local/etc/nginx/nginx.conf 또는
  • /usr/local/nginx/conf/nginx.conf

  • 프로필 은 아래 부분 으로 구성 되 어 있 습 니 다:
  • 지령 - 이름과 파 라 메 터 를 포함 하여 분점 으로 끝 날 수 있 습 니 다
    gzip on;

  • 문맥 - 블록 을 나 누 면 명령 어 를 설명 할 수 있 습 니 다. - 프로 그래 밍 언어 와 유사 한 역할 영역
    worker_processes 2; #        
    
    http {              # http    
        gzip on;        # http        
    
      server {          # server    
        listen 80;      # server        
      }
    }
    명령 형식
    여러 컨 텍스트 에서 같은 명령 을 사용 할 때 조심해 야 합 니 다. 계승 모델 이 서로 다른 명령 을 가지 고 있 지 않 기 때 문 입 니 다.세 가지 유형의 지령 이 있 는데, 각각 자신의 계승 모델 이 있다.
    일반 명령 어
    모든 문맥 에 유일한 값 만 있 습 니 다.그리고 현재 컨 텍스트 에서 만 정의 할 수 있 습 니 다.하위 컨 텍스트 는 부모 급 의 값 을 덮어 쓸 수 있 으 며, 이 덮어 쓰 기 는 현재 하위 컨 텍스트 에서 만 유효 합 니 다.
    gzip on;
    gzip off; #   ,                  2 
    
    server {
      location /downloads {
        gzip off;
      }
    
      location /assets {
        # gzip is on here
      }
    }

    배열 명령
    같은 컨 텍스트 에 여러 개의 명령 을 추가 하면 완전히 덮어 쓰 는 것 이 아니 라 여러 개의 값 을 추가 합 니 다.하위 컨 텍스트 에서 명령 을 정의 하면 부모 컨 텍스트 의 값 을 덮어 씁 니 다.
    error_log /var/log/nginx/error.log;
    error_log /var/log/nginx/error_notive.log notice;
    error_log /var/log/nginx/error_debug.log debug;
    
    server {
      location /downloads {
        #                  
        error_log /var/log/nginx/error_downloads.log;
      }
    }

    행동 명령
    행동 은 일 을 바 꾸 라 는 지령 이다.모듈 의 수요 에 따라 계승 하 는 행위 가 다 를 수 있 습 니 다.
    예 를 들 어 rewrite 명령 은 일치 하 는 것 이 라면 모두 실 행 됩 니 다.
    server {
      rewrite ^ /foobar;
    
      location /foobar {
        rewrite ^ /foo;
        rewrite ^ /bar;
      }
    }

    사용자 가 가 져 오 려 면 / sample:
  • server 의 rewrite 가 실 행 됩 니 다. / sample rewrite 에서 / foobar
  • 까지 실 행 됩 니 다.
  • location / foobar 가 일치 합 니 다
  • location 의 첫 번 째 rewrite 실행, / foobar rewrite 에서 / foo
  • location 의 두 번 째 rewrite 실행, / foo rewrite 에서 / bar
  • return 명령 은 다른 행동 을 제공 합 니 다:
    server {
      location / {
        return 200;
        return 404;
      }
    }

    위 와 같은 상황 에서 즉시 200 으로 돌아간다.
    처리 요청
    Nginx 내부 에서 여러 개의 가상 서버 를 지정 할 수 있 습 니 다. 모든 가상 서버 는 server {} 컨 텍스트 로 설명 할 수 있 습 니 다.
    server {
      listen      *:80 default_server;
      server_name netguru.co;
    
      return 200 "Hello from netguru.co";
    }
    
    server {
      listen      *:80;
      server_name foo.co;
    
      return 200 "Hello from foo.co";
    }
    
    server {
      listen      *:81;
      server_name bar.co;
    
      return 200 "Hello from bar.co";
    }

    이것 은 Nginx 에 게 오 는 요청 을 어떻게 처리 하 는 지 알려 줄 것 입 니 다.Nginx 는 먼저 listen 명령 을 검사 하여 주어진 IP 포트 조합 을 감청 하 는 가상 호스트 를 테스트 할 것 입 니 다.
    그리고, servername 명령 의 값 은 호스트 헤더 (호스트 도 메 인 이름 저장) 를 검사 합 니 다.
    Nginx 는 다음 순서대로 가상 호스트 를 선택 합 니 다.
  • 매 칭 severname 명령 의 IP - 포트 호스트
  • default 보유server 에 표 시 된 IP - 포트 호스트
  • 먼저 정 의 된 IP - 포트 호스트
  • 일치 하지 않 으 면 연결 을 거부 합 니 다.

  • 예 를 들 어 다음 의 예:
    Request to foo.co:80     => "Hello from foo.co"
    Request to www.foo.co:80 => "Hello from netguru.co"
    Request to bar.co:80     => "Hello from netguru.co"
    Request to bar.co:81     => "Hello from bar.co"
    Request to foo.co:81     => "Hello from bar.co"
    server_name  지령
    server_name 명령 은 여러 값 을 받 습 니 다.정규 표현 식 과 일치 하 는 마스크 도 처리 합 니 다.
    server_name netguru.co www.netguru.co; # exact match
    server_name *.netguru.co;              # wildcard matching
    server_name netguru.*;                 # wildcard matching
    server_name  ~^[0-9]*\.netguru\.co$;   # regexp matching

    다른 뜻 이 있 을 때 nginx 는 다음 명령 을 사용 합 니 다:
  • 정확 한 이름
  • 가장 긴 마스크 이름 은 별표 로 시작 합 니 다. 예 를 들 어 '*. example. org' 입 니 다.
  • 가장 긴 마스크 이름 은 별표 로 끝 납 니 다. 예 를 들 어 "mail. *"
  • 먼저 정규 표현 식 과 일치 합 니 다 (설정 파일 의 순서에 따라)
  • Nginx 는 해시 표 3 개 를 저장 합 니 다. 정확 한 이름, 별표 로 시작 하 는 마스크, 별표 로 끝 나 는 마스크 입 니 다.결과 가 표 에 없 으 면 정규 표현 식 테스트 를 순서대로 진행 합 니 다.
    명심 할 만 한 것 은
    server_name .netguru.co;

    아래 에서 온 줄 임 말 입 니 다.
    server_name  netguru.co  www.netguru.co  *.netguru.co;

    조금 다르다..netguru.co
     두 번 째 표 에 저장 하 는 것 은 명시 적 성명 보다 조금 느리다 는 것 을 의미한다.listen  지령
    많은 경우 listen 명령 을 찾 아 IP: 포트 값 을 받 아들 일 수 있 습 니 다.
    listen 127.0.0.1:80;
    listen 127.0.0.1;    # by default port :80 is used
    
    listen *:81;
    listen 81;           # by default all ips are used
    
    listen [::]:80;      # IPv6 addresses
    listen [::1];        # IPv6 addresses

    단, UNIX - domain 소켓 도 지정 할 수 있다.
    listen unix:/var/run/nginx.sock;

    호스트 이름 까지 사용 할 수 있 습 니 다.
    listen localhost:80;
    listen netguru.co:80;

    그러나 호스트 가 nginx 를 시작 할 수 없 기 때문에 특정한 TCP Socket 에 연결 할 수 없습니다.
    마지막 으로 명령 이 존재 하지 않 으 면 사용 합 니 다.  *:80
    최소 화 설정
    이러한 지식 이 있 습 니 다. - nginx 를 실행 하 는 데 필요 한 최소 설정 을 만 들 고 이해 할 수 있어 야 합 니 다.
    # /etc/nginx/nginx.conf
    
    events {}                   # events context needs to be defined to consider config valid
    
    http {
     server {
        listen 80;
        server_name  netguru.co  www.netguru.co  *.netguru.co;
    
        return 200 "Hello";
      }
    }

    root, location, 그리고 try파일 명령
    루트 명령 어
    루트 명령 은 요청 한 루트 디 렉 터 리 를 설정 합 니 다. nginx 가 요청 을 파일 시스템 에 표시 할 수 있 도록 합 니 다.
    server {
      listen 80;
      server_name netguru.co;
      root /var/www/netguru.co;
    }

    주어진 요청 에 따라 nginx 서버 가 허용 하 는 내용 을 지정 합 니 다.
    netguru.co:80/index.html     # returns /var/www/netguru.co/index.html
    netguru.co:80/foo/index.html # returns /var/www/netguru.co/foo/index.html
    location  지령
    location 명령 은 요청 한 URI 에 따라 설정 합 니 다.location [modifier] path
    location /foo/ {
      # ...
    }

    수정자 가 지정 되 지 않 으 면 경 로 는 접두사 로 간주 되 고 그 다음 에는 무엇이든 따라 갈 수 있 습 니 다.
    이상 의 예 가 일치 합 니 다.
    /foo
    /fooo
    /foo123
    /foo/bar/index.html
    ...

    또한 주어진 컨 텍스트 에 여러 location 명령 을 사용 할 수 있 습 니 다.
    server {
      listen 80;
      server_name netguru.co;
      root /var/www/netguru.co;
    
      location / {
        return 200 "root";
      }
    
      location /foo/ {
        return 200 "foo";
      }
    }
    netguru.co:80   /       # => "root"
    netguru.co:80   /foo    # => "foo"
    netguru.co:80   /foo123 # => "foo"
    netguru.co:80   /bar    # => "root"

    Nginx 도 location 을 연결 할 수 있 는 수정자 들 을 제공 했다.이 수정자 들 은 location 모듈 이 사용 하 는 곳 에 영향 을 줄 것 입 니 다. 모든 수정자 가 우선 순 위 를 배정 하기 때 문 입 니 다.
    =           - Exact match
    ^~          - Preferential match
    ~ && ~*     - Regex match
    no modifier - Prefix match

    Nginx 는 먼저 정확 한 매 칭 을 검사 합 니 다.만약 찾 지 못 한다 면 우 리 는 우선 순위 가 가장 높 은 것 을 찾 을 것 이다.이 일치 가 실패 하면 정규 표현 식 일치 가 나타 나 는 순서에 따라 테스트 합 니 다.최소한 마지막 접두사 가 일치 하면 사 용 됩 니 다.
    location /match {
      return 200 'Prefix match: matches everything that starting with /match';
    }
    
    location ~* /match[0-9] {
      return 200 'Case insensitive regex match';
    }
    
    location ~ /MATCH[0-9] {
      return 200 'Case sensitive regex match';
    }
    
    location ^~ /match0 {
      return 200 'Preferential match';
    }
    
    location = /match {
      return 200 'Exact match';
    }
    /match/    # => 'Exact match'
    /match0    # => 'Preferential match'
    /match1    # => 'Case insensitive regex match'
    /MATCH1    # => 'Case sensitive regex match'
    /match-abc # => 'Prefix match: matches everything that starting with /match'

    좋은 웹페이지 즐겨찾기