msmasd

Nginx

2018. 10. 16. 20:53
  • HTTP(HyperText Transfer Protocol)
    • http란 웹 서버와 웹클라이언트가 서로 정보를 주고 받기 위한 약속(protocol)이다.
    • 즉 요청은 어떻게 해야하고, 응답은 어떻게 해야하는지에 대한 규칙을 미리 정해놓은것
  • Nginx?
    • 위키백과
      • 웹 서버 소프트웨어로, 가벼움과 높은 성능을 목표로 한다.
      • 웹 서버, 리버스 프록시 및 메일 프록시 기능을 가진다.
      • Nginx는 현재 아파치(44%) 다음으로 점유율을 가진다.(Nginx의 점유율은 20%)
      • Nginx는 요청에 응답하기 위해 비동기 이벤트 기반 구조를 가진다. (아파치 HTTP 서버의 스레드/프로세스 기반 구조를 가지는 것과 대조적)
        • Nginx는 비동기 이벤트 기반(ioctl, send, recvm epoll)으로 만들어짐 -> 더 적은 자원으로 더 빠르게 데이터를 서비스 할 수있다.
  • Nginx와 아파치의 차이점
    • Apache Http 서버는 요청 하나당 프로세스(또는 쓰레드)가 처리하는 구조이다 보니, 만약 Apache Http 서버의 프로세스가 blocking(file or DB IO)가 되면 요청을 처리하지 못하고 처리완료때까지 대기해야한다. ->Timeout이나 Keep Alive 체크를 정말 잘써야 하는 이슈가 생긴다.
    • MaxClient의 수치를 높여서 사용자에게 원활하게 서비스를 할 수 있지만, 프로세스(또는 쓰레드)는 메모리를 많이 할당/해제하는 상황이 생길 수 있다.
    • nginx는 쓰레드를 적게 사용하는 구조이다(하나의 쓰레드에서 이벤트를 처리한다.)
      • -> 쓰레드를 적게 사용하면 메모리도 줄고, 여러 쓰레드를 쓰는것보다 context switching 비용도 줄기 때문에 cpu의 소모도 상대적으로 적다.
    • Nginx의 단점
      • 백엔드와 api통신이 어렵고
      • 모듈개발이 어렵고
      • Apache Http 서버처럼 다양한 모듈이 없다.
  • Nginx 설치 및 실행방법
    • Ubuntu 설치 명령어
      • sudo aptitude install software-properties-common;
        • 여기서 에러가 발생할 수 있다(aptitude명령어를 찾을 수 없다고 나오면 sudo apt-get install aptitude를 실행)
      • sudo add-apt-repository ppa:nginx/development;
      • sudo apt-get update;
      • sudo apt-get install nginx;
    • Ubuntu Nginx 경로
      • Document Root
        • /usr/share/nginx/html/
      • conf file
        • /etc/nginx/
      • log flie
        • /var/log/nginx/
      • 잘 모르면 'sudo find / -name nginx -type d'를 통해 nginx 경로들을 확인하자.
    • Ubuntu 실행 명렁어
      • service nginx start - nginx 실행
      • service nginx stop - nginx 정지
      • service nginx restart - nginx 재시작
      • service nginx reload - nginx 설정파일을 재로드
      • service nginx status - 현재 상태
  • Nginx.conf
    • nginx.conf - 메인 설정 파일
    • fcgi.conf - FastCGI 환경설정 파일
    • sites-enabled - 활성화된 사이트들의 설정 파일들이 위치. 아파치에서는 Virtual host의 설정에 해당(기본적으로 존재하지 않을 수 있음)
    • sites-available - 비활성화된 사이트들의 설정 파일들이 위치
    • 문법
      • http 블록
        • http블록은 이후에 소개할 server, location의 루트 블록이라고 할 수 있고, 여기서 설정된 값을 하위 블록들은 상속한다. http 블록은 여러개를 사용할 수 있지만 관리상의 이슈로 한번만 사용하는것을 권장한다.
        • http, server, location 블록은 계층구조를 가지고 있다. 많은 지시어가 각각의 블록에서 동시에 사용할 수 있는데, http의 내용은 server의 기본값이 되고, server의 지시어는 location의 기본값이 된다. 그리고 하위의 블록에서 선언된 지시어는 상위의 선언을 무시하고 적용된다.
      • server 블록
        • server 블록은 하나의 웹사이트를 선언하는데 사용된다. 가상 호스팅(Virtual Host)의 개념이다. 예를들어 하나의 서버로 http://opentutorials.org 와 http://egoing.net 을 동시에 운영하고 싶은 경우 사용할 수 있는 방법이다.
      • location 블록
        • location 블록은 server 블록 안에 등장하면서 특정 URL을 처리하는 방법을 정의한다. 이를테면 http://opentutorials.org/course/1 과 http://opentutorials.org/module/1로 접근하는 요청을 다르게 처리하고 싶을 때 사용한다. ->경로에 맞춰서 서버를 지정해서 보낼 수 있다.
      • events 블록
        • 이벤트 블록은 주로 네트워크의 동작방법과 관련된 설정값을 가진다. 이벤트 블록의 지시어들은 이벤트 블록에서만 사용할 수 있고, http, server, location와는 상속관계를 갖지 않는다.

생활코딩에 있는 Nginx관련 내용을 참조하였습니다.(https://opentutorials.org/module/384/3462)


이 글을 공유합시다

facebook twitter googleplus kakaostory naver