- 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
- conf file
- log flie
- 잘 모르면 '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)