[Nginx] Overview & Install

반응형

이번글에서는 차세대 web server인 Nginx에 대해 알아보고, 설치하는 과정까지 진행해보도록 하겠습니다.

1. Nginx란?

high performance & high concurrency & low resource usage 를 자랑하는 web server 입니다.

Nginx는 apache의 성능에 좌절한 어느한 개발자가.. 동시에 최대 10,000건의 concurrent connections 까지 처리할 수 있도록 개발한 차세대 web server 입니다.

image.png

이러한 Nginx는 reverse proxy server로도 사용가능합니다.

image.png

2. Apache vs Nginx

그렇다면 apache와 비교해 nginx이 다른점은 무엇일까요?

먼저 apache는 prefork로 구성된 web server입니다.

image.png

이는 request가 들어오기전에 먼저 set number of process 정의해 놓은뒤, 어떠한 request가 들어오던간에 각각의 request를 처리하기위해 각각의 process가 대응한다는 의미입니다.

따라서 reqest가 정적인 txt/png 이거나 server side인 php이거나에 관계없이 모든 request는 각각의 process가 개별적으로 처리합니다.

이때 set number of process 이상으로 동시에 request가 들어온 경우에는 해당 number를 넘어가는 request는 reject됩니다.

image.png

반면에 nginx는 각각의 reqeust를 하나의 nginx machine이 asynchronously 하게 처리합니다.

image.png

이때 만약 php와 같이 server 쪽에서 처리해야되는 response가 요청된경우에는, 해당 요청은 완전히 독립된 server process에서 처리된뒤 nginx의 reverser proxy를 사용해 결과값을 전달합니다.

반면에 png/txt와 같은 static response는 nginx machine에서 즉시 전달하기때문에 resource의 낭비가 현저하게 줄어들게됩니다.

image.png

이렇게 save한 자원을 server side process가 사용하게되면 더욱 빠르고 안정적인 서비스를 제공할 수 있습니다.

image.png

이와 반대로 apache는 static / server side 에 관계없이 각각의 request를 각각의 process가 처리하기 때문에 많은 resource overhead 가 발생하게 됩니다.

image.png

따라서 잘 구성한 nginx server는 apache에 대비 언제나 효율적입니다.

image.png

3. Install

이제 nginx를 다운받아 보겠습니다.

저는 nginx를 구동할 server로 aws의 ec2를 사용하겠습니다. 또한 앞으로의 모든 설명은 centos linux 기준입니다.

3-1) linux package manager

먼저 linux의 package manager를 사용해 nginx를 다운받아보겠습니다.

package manager를 통해 nginx를 다운받으면 빠르고 쉽지만, nginx의 가장 기본적인 기능만 사용할 수 있어 제약사항이 있습니다. 그렇지만 testing 혹은 기본 기능으로만으로 충분한 server라면 package manager를 사용해도 무방합니다.

image.png

아래의 명령어를 순서대로 입력해 다운받으면 됩니다.

download nginx

sudo yum update
sudo yum install epel-release
sudo yum install nginx
sudo service nginx start

다운로드 완료후 정상적으로 nginx가 수행중인 것을 확인하려면 아래의 명령어를 입력합니다.

check nginx status

ps aux | grep nginx

master node와 worker node가 각각 한개씩 실행되고 있는 것을 확인할 수 있습니다.

image.png

이후 nginx를 설치한 server에 접근해보면 아래와 같이 nginx의 welcome 화면을 확인할 수 있습니다 😎.

image.png

3-2) building nginx from source

이번에는 source를 사용해 nginx를 다운받아보겠습니다.

package manager와 달리, source를 사용해 nginx를 다운받으면 custom configuration을 구성할 수 있습니다. 또한 3rd party 에서 제공해주는 다양한 nginx module을 사용할 수 있습니다.

저는 앞서 사용한 ec2를 reboot해 사용하도록 하겠습니다.

다운받을 nginx source 및 여러 modules에 대한 정보는 http://nginx.org/ 에서 확인할 수 있습니다. 저는 http://nginx.org/en/download.html 에서 latest version의 sourec code를 wget을 사용해 다운받겠습니다.

image.png

아래의 명령어를 순서대로 입력합니다.

download nginx source code by wget

wget http://nginx.org/download/nginx-1.17.8.tar.gz
tar -zxvf nginx-1.17.8.tar.gz
cd nginx-1.17.8/
sudo yum groupinstall "Development Tools"
sudo yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel
./configure

이제 기본적인 설치는 완료되었습니다. 지금까지 설치한 nginx는 default configuration으로 이루어져 있습니다. 만약 사용자가 configuration을 추가하거나 변경하고 싶다면 아래의 명령어를 사용해 configuration 명령어를 확인 할 수 있습니다.

check available configuartion

./configure --help

image.png

3-3) change defualt configuration

간단히 몇가지 configuration만 변경해보도록 하겠습니다. 아래와 같이 입력합니다.

change default configuration

## custom configuration setting
./configure --sbin-path=/usr/bin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-pcre --pid-path=/var/run/nginx.pid --with-http_ssl_module

## compile configuration source
make

## install compile source
make install

## start nginx
nginx

위의 내용은 아래와 같습니다.

• --sbin-path=/usr/bin/nginx : nginx의 bin location을 지정합니다.
• --conf-path=/etc/nginx/nginx.conf : nginx의 conf location을 지정합니다.
• --error-log-path=/var/log/nginx/error.log : error log의 location을 지정합니다.
• --http-log-path=/var/log/nginx/access.log : access log의 location을 지정합니다.
• --with-pcre : pcre 모듈을 사용합니다.
• --pid-path=/var/run/nginx.pid : pid의 location을 지정합니다.
• --with-http_ssl_module : http ssl 모듈을 사용합니다.

다운로드가 완료되었습니다 😎.

동일하게 아래의 명령어로 nginx가 제대로 실행되고 있는지 확인할 수 있습니다.

ps aux | grep nginx

정상적으로 실행되고 있습니다.

image.png

다음글에서는 좀더 세부적인 configuration을 다뤄보도록 하겠습니다. 👏👏👏


참고 자료 : https://www.udemy.com/course/nginx-fundamentals/


반응형

'Nginx' 카테고리의 다른 글

[Nginx] Logging  (0) 2020.08.27
[Nginx] Try Files & Named Location  (0) 2020.08.27
[Nginx] Redirect & Rewrite  (0) 2020.08.27
[Nginx] Location Block & Variables  (1) 2020.08.27
[Nginx] Configuration  (1) 2020.08.27

댓글

Designed by JB FACTORY