Nginx


Nginx는?

Nginx는 Igor Sysoev라는 러시아 개발자가 개발한 무료 오픈 소스 web 서버이다.

Apache의 대안으로 제안 된 web 서버 소프트웨어이다. Apache는 동시 다수 연결시의 처리에 약한 문제점이 있었다. (클라이언트 1만대일 경우 문제 발생) 그래서 높은 부하에 강한 web 서버 소프트웨어로 개발 된 것이 Nginx이다.

Web 서버는?

외부에서 들어오는 요청을 받아 Web 서버에서 정적 컨텐츠을 응답하고, 응용 프로그램 서버에 동적 콘텐츠 요청하면 응용 프로그램 서버의 처리 결과를 클라이언트에 응답한다.

이 Web 서버에 해당하는 것이 Nginx이다.

Apache와 Nginx의 차이점

Nginx와 자주 인용 나오는 것이 Apache이다. Apache는 대표적인 web 서버이다. Nginx는 원래, Apache는 일반적인 Web 서버가 지닌 동시 대량 액세스에 대한 응답이 나빠지는 문제를 해결하는 위해 태어난 것이 라든지. . .

주요 차이점

Apache의 특징

  • Web 서버로서의 기능이 풍부하고 쓰기가 좋다.
  • 다양한 만큼, 서버 비용은 높다.

Nginx의 특징

  • Web 서버와의 중개가 되어 요청에 응답을 하는 리버스 프록시 프로그램 기능이 있고, 동시 요청의 처리에 특화되어 있다.
  • non-blocking I/O를 지원하여 대량의 데이터 전송과 대량 동시 접속에 특화되어 있다.
  • 단순하기 때문에 서버 비용이 저렴하다.
  • 장점으로는 Web 서버의 존재를 숨길 수 있고, Web 서버가 여러 개가 있는 경우에는 처리를 분산 할 수 있다. 즉, 로드 밸런서와 같은 기능을 해준다. 이는 동시 다수 요청에 강한 특징을 가지게 된다.

Apache와 Nginx의 구동 방식

Apache는 멀티 프로세스의 프로세스 중심 아키텍처

  • 각 요청을 프로세스에 할당 처리를 위한 요청이 대량으로 올 때 프로세스가 동시에 시작하기 때문에 오버 헤드(부하 처리)가 매우 커진다는 단점이 있다.

Nginx는 단일 스레드 모델의 이벤트 기반 아키텍처

  • Node.js와 같이 이벤트 루프 방식 (단일 스레드에서 루프를 돌려 큐에 쌓인 이벤트를 처리해 나가는 처리 방식)
  • 이벤트 루프 방식을 채용하는 것으로, 소량의 프로세스만으로 대량의 요청을 처리 할 수 있다.
  • 그러면 C10K 문제를 해결할 수 있다

Nginx 설치

Mac에서 설치

brew 명령어를 이용하여 설치한다.

% brew install nginx

아래 명령어를 실행하고, http://localhost:8080에 접속해 본다.

% nginx

아래 명령어로 중지한다.

% nginx -s stop

설정 파일을 아래에 존재한다.

/usr/local/etc/nginx/nginx.conf

CentOS에서 설치

/etc/yum.repos.d/nginx.repo을 작성한다.

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1

yum 명령어로 설치한다.

$ sudo yum install nginx

Nginx 명령어

시작

nginx

정지

CentOS 6, Amazon Linux

nginx -s stop

CentOS 7, Amazon Linux 2

systemctl stop nginx

재시작

CentOS 6, Amazon Linux

/etc/init.d/nginx restart

CentOS 7, Amazon Linux 2

systemctl restart nginx

스타트업 등록

CentOS 7, Amazon Linux 2

systemctl enable nginx #등록
systemctl disable nginx #삭제

설정 다시로드

CentOS 6, Amazon Linux

nginx reload
service nginx reload

CentOS7, Amazon Linux 2

systemctl reload nginx

설정 파일 체크

nginx -t

설정 파일 위치

주 설정 파일

cd /etc/nginx/

각 서버 설정 파일

cd /etc/nginx/conf.d/