nginx 역할

참고사이트: http://kyounginserverstudy.blogspot.kr/2016/08/nginx.html

NGINX는 차세대 웹서버로 불린다. 위의 그래프를 통해서 알 수 있듯이 Apache의 독주에 제동을 걸고 있다. NGINX의 특징은 한마디로 정의하면 아래와 같다.
더 적은 자원으로 더 빠르게 데이터를 서비스 할 수 있다.

웹 응용 프로그램 서버에서 Nginx 역할

  • 응용프로그램 서버에 요청을 보내는 리버스 프록시로서의 역할
  • 응용프로그램 서버가 처리하지 않는 이미지나 css 파일과 같은 정적 파일을 처리하는 HTTP 서버로서의 역할

 –  리버스 프록시 역할

클라이언트 요청을 각 응용프로그램 서버에 배분해 그결과를 클라이언트에 반환하는 것이다. 클라이언트의 요청은 일단 모두 리버스 프록시가 받아 응용프로그램 서버로 보내고그 응답을 버퍼링해 클라이언트에 반환한다. 일반적으로 리버스 프록시는 각 응용프로그램 서버에 요청을 배분해 부하를 분산하고 캐시 서버로서의 역할을 하지만 웹 응용프로그램 서버에 리버스 프록시를 두는 이유는 주로 요청에 대한 버퍼링 때문이다. 응용프로그램 서버가 직접 클라이언트와 통신할 경우 사용자에게 응답을 반환할 때까지 응용프로그램 서버가 커넥션을 가져야 한다. 그러므로 단일 프로세스가 처리할 수 있는 요청 수를 제한하는 응용프로그램 서버에서는 통신 속도가 느린 클라이언트의 접속 때문에 1개의 프로세스가 응답 대기 상태가 돼버린다. 리버스 프록시는 응용프로그램 서버의 응답을 버퍼링해 응용프로그램 서버가 각 클라이언트와 통신을 신경 쓰지 않고 크게 지연 없이 입출력을 종료하고 다음 커넥션을 처리할 수 있다.

 – 정적 파일을 처리하는 HTTP 서버

응용프로그램 서버가 이미지 파일이나 css 파일 같은 정적파일을 요청을 처리가게 되면 동적처리가 주 목적인 서버의 리소스를 낭비하게 된다. 이와 같은 정적 파일의 요청을 처리하는 Nginx의 두번째 역할이다. (location 지시어를 사용하여 요청을 배분한다.)

기본적인 지시어

*** Nginx기본적인 처리 흐름
  1. host header,port에 어떤 server지시어가 일치하는지 할당
  2. 일치하는 server 지시어의 처리를 수행
  3. server 지시어으 일치하는 location 컨텍스트의 처리를 수행

HTTP server를 동작시키는데 필요한 지시어

  • server 지시어
    http서버의 가상 호스트를 정의. server 컨텍스트를 정의

    server{ listen 80; server_name http://www.example.com … // 이안에 작성한 설정은 http://www.example.com 에 적용 }
    
    
  • location 지시어
    지정한 조건에 일치하는 경로에 대한 처리를 작성하기 위해서 사용

    location /image/ {

    … // /image/이하 파일에 적용할 설정

    }

    
    

    경로 기록 외 정규 표현등 쓸수 있다. 정규표현을 사용하면 경로에 따라 동작을 배분 설정도 간단히 작성 가능

  • root 지시어
    실제 콘텐츠가 있는 폴더를 지정,
    root지시어는 절대 경로이거나 Nginx 설치 폴더에 대한 상대 경로를 지정,
    root 폴더는 http 컨텍스트, server 컨텍스트, location컨텍스트에 작성 할 수 있다.

    location / { root html;

    // http://www.example.com/ 이 root가 된다.

    } location /html/ { root html;

    // http://www.example.com/html/ 이 root가 된다.

    }

    
    
  • error_page 지시어
    에러 시에 표시되는 url을 지정
    1.  인수는 공백 문자로 구분해
    정렬된 http 상태 코드를 지정하고,
    마지막 인수로 그 상태 코드와 일치하는 경우에 표시할 url을 지정

    error_page 404 /404.html error_page 502 503 504 /5xx.html
    // 502.503.504일때 /5xx.html을 표시
    
    
    1. @로 시작하는 경로를 사용해 다른 서버로 대체 설정 할 수 있다.

    @로 시작하는 경로는 특별한 location으로 Nginx 내부에서만 사용.

    error_page 404 @fallback; location @fallback{ proxy_pass http://fallback_server; // 이 서버의 파일을 찾을 수 없을 때는 fallback_server로 정의한 서버에 요청 }