Nginx 튜 토리 얼 1: 기본 개념

11961 단어
간단 한 소개
우 리 는 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 matchserver_name *.netguru.co; # wildcard matchingserver_name netguru.*; # wildcard matchingserver_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 usedlisten *:81;listen 81; # by default all ips are usedlisten [::]:80; # IPv6 addresseslisten [::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.confevents {} # events context needs to be defined to consider config validhttp { 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.htmlnetguru.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 matchno 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'

      try_files  지령
    다른 경 로 를 시도 하고 경 로 를 찾 으 면 돌아 갑 니 다.
    try_files $uri index.html =404;

    그래서  /foo.html  요청, 다음 순서대로 파일 을 되 돌려 보 려 고 합 니 다:
  • $uri ( /foo.html )
  • index.html
  • 아무것도 찾 지 못 하면 404
  • 로 돌아 갑 니 다.
    재 미 있 는 것 은 서버 컨 텍스트 에서 try 를 정의 하면files, 그리고 모든 요청 에 맞 는 location - try 를 정의 합 니 다.files 는 실행 되 지 않 습 니 다.
    서버 컨 텍스트 에 정 의 된 tryfiles 는 pseudo - location 입 니 다. 가장 불가능 한 위치 입 니 다.따라서 location / 는 pseudo - location 보다 더 구체 적 으로 정 의 됩 니 다.
    server { try_files $uri /index.html =404; location / { }}

    따라서 server 컨 텍스트 에 try 가 나타 나 는 것 을 피해 야 합 니 다.files:
    server { location / { try_files $uri /index.html =404; }}

    읽 어 주 셔 서 감사합니다.만약 대량의 자원 이 없다 면 이 시 리 즈 는 완성 할 수 없 을 것 이다.이 일련의 글 쓰기 에서 우 리 는 특히 유용 한 사 이 트 를 발견 했다.
  • nginx 문서
  • nginx 블 로그
  • udemy (온라인 교육 사이트) 의 nginx 원리 강좌
  • Ilya Grigorik 의 블 로그 와 그의 놀 라 운 책:
  • Martin Fjordvald 의 블 로그
  • 다음으로 전송:https://www.cnblogs.com/zytrue/p/8489365.html

    좋은 웹페이지 즐겨찾기