Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

nginx 설치

nginxIgor Sysoev가 만든 웹서버로 현재 오랫동안 가장 많이 쓰이는 웹서버였던 Apache를 빠르게 대체하고 있습니다. Nginx HTTP Server 한국어판에 보면 nginx는 최근(사실 아주 최근은 아니지만요)에 인기를 끌고 있지만 2002년부터 Igor가 램브러라는 웹사이트의 엄청난 트래픽을 처리하기 위해서 만들기 시작한 웹서버로 역사가 아주 짧지는 않습니다. Netcraft에 따르면 2012년 5월기준으로 nginx가 10.67%를 차지하고 있습니다.(Apache는 64.2%입니다.) nginx는 쓰레드기반인 Apache와 대비되는 이벤트기반으로 동작하고 있으므로 훨씬 적은 리소스를 사용해서 더 많은 트래픽을 감당할 수 있습니다.

데비안의 apt-get같은 팩키지 매니저를 사용하면 쉽게 nginx를 설치할 수 있지만 아주 간단한 사용목적이 아니라면 소스에서 직접 컴파일해서 설치하는 것이 좋다고 생각합니다. nginx는 아파치와는 다르게 추가적인 애드온을 사용하려면 컴파일할 때 옵션을 추가해서 컴파일해야하기 때문에 직접 관리하고 버전업하는게 더 좋은 듯 합니다.(매번 컴파일하는 것은 기존 아파치에서 갈아탈때 큰 불편함으로 다가올 수 있는 부분인데 이는 아마 성능의 최적화하기 위함이 아닌가 추측해 봅니다.)



의존성 설치
nginx를 컴파일하기 전에 몇가지 의존성 라이브러리들을 설치해 주어야 합니다.

$ sudo apt-get install gcc libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev

위와 같이 간단히 설치할 수 있습니다. PCRE나 zlib은 컴파일할 때 옵션으로 소스를 지정할 수 도 있지만 OS에 설치해 놓는 것이 편한듯 합니다.



nginx 컴파일
nginx 다운로드 사이트에서 nginx 소스를 다운받아서 압축을 풀어줍니다.(현재 안정버전은 1.2.0입니다.)

$ ./configure --prefix=/usr/local/lib/nginx/nginx-1.2.0 \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_ssl_module \
--with-http_stub_status_module \
--user=outsider

제가 최근 컴파일할 때 사용한 컴파일 명령어입니다.(뭐 베스트프렉티스다 라는 것은 아닙니다면 처음에 사용할 때는 무슨 옵션을 사용해야 할지도 모르기 때문에 참고삼아 적습니다.) --prefix는 컴피일된 위치를 지정한 것이고 --conf-path는 설정파일의 위치를 지정한 것이고 이 위치에 nginx.conf가 생기고 그외 관련 설정파일들이 /etc/nginx 아래에 생성되게 됩니다. --error-log-path---http-log-path는 각각 로그파일의 위치를 지정한 것입니다. path라고 되어 있어서 헷갈리는데 파일 디렉토리만 지정하는게 아니라 파일까지 지정해 주어야 합니다. --with-http_ssl_module는 SSL을 사용하기 위해서 지정한 것이고 --with-http_stub_status_module는 nginx의 상태를 모니터링 할 수 있는 모듈을 추가한 것이고 --user는 워커프로세스의 소유자를 지정한 것입니다. 80포트를 사용해야 하므로 마스터 프로세스는 root로 실행하지만 root가 생성한 워커 프로세스는 여기서 지정한 사용자로 생성됩니다.

nginx에 대한 컴파일 옵션은 설치가이드 문서에 잘 나와있습니다. 설정옵션외에 기본으로 포함된 모듈들이 있기 때문에 필요없는 것은 --without 으로 제거하고 기본외에 추가로 필요한 것은 --with 옵션으로 지정해 주어야 합니다. nginx가 제공하는 모듈들은 모듈 위키페이지에 나와있습니다. 그 외 서드파티 모듈들은 서드파티 모듈을 다운로드 받아서 컴파일할 때 --add-module 옵션을 사용해서 같이 컴파일하면 됩니다. 설정을 한 뒤 sudo make && make install를 하면 설치가 됩니다.



nginx의 사용
nginx.conf의 설정에 관련한 내용은 꽤 양이 많으므로 다루지 않습니다. nginx를 실행하려면 다음과 같은 명령어를 실행합니다.

$ sudo /path/to/nginx

nginx 파일은 nginx를 설치한 디렉토리의 sbin 폴더아래 있고 80포트를 사용해야하므로(웹서비이기 때문에 보통...) sudo를 사용해서 root권한으로 실행합니다. 위와 같이 실행하고 아무런 메시지가 나오지 않으면 정상적으로 실행됩니다.

 $ sudo /path/to/nginx -s stop
$ sudo /path/to/nginx -s reload
 

위와 같은 명령어로 nginx를 멈추거나 설정을 재적용할 수 있습니다. 설정을 변경해서 다시 적용하는 경우 nginx를 멈추지 않고 reload 명령어를 사용해도 충분하기 때문에 운영하면서 바로 새로운 명령어를 적용할 수 있습니다.

 $ sudo /path/to/nginx -t
nginx: the configuration file /path/tonginx.conf syntax is ok
nginx: configuration file /path/to/nginx.conf test is successful
 

-t 옵션을 사용하면 reload나 시작을 하기전에 설정파일이 제대로 작성되었는지 테스트할 수 있습니다. 위처럼 successful이 나왔으므로 설정파일이 제대로 되어 있고 여기서 실패할 경우에는 relaod하거나 시작할 때 실패하게 됩니다.
2012/06/04 01:52 2012/06/04 01:52