1. 개요
지난번에 Linux에서 Nginx 1.4.5 설치하기 - 1편을 통하여
/index.php/nginx/57-linux-nginx-1-4-5
Nginx 1.4.5 소스를 받아 설치하는 과정을 간략히 보여드린 바 있습니다.
이번 글에서는 몇 가지 컴파일 옵션의 의미와, 실제로 옵션을 주어 설치하는 과정을 말씀드리고자 합니다.
2. --with-http_ssl_module
이 옵션은 Nginx가 HTTPS를 처리할 수 있도록 HTTP SSL 모듈을 포함해 컴파일합니다.
기본적으로는 HTTPS를 처리할 수 없게 되어 있으므로, HTTPS 통신이 필요한 경우 반드시 추가해야 합니다.
또한 소스 컴파일 시점에 해당 장비에 OpenSSL 라이브러리와 헤더가 설치되어 있어야 합니다. 확인은 간단히 openssl 명령을 실행해 보거나, 배포판 패키지 관리자로 OpenSSL 개발 패키지가 설치되어 있는지 확인하면 됩니다.
# ./configure --prefix=/home/nginx --with-http_ssl_module (생략) checking for getaddrinfo() ... found checking for PCRE library ... found checking for PCRE JIT support ... not found checking for OpenSSL library ... found checking for zlib library ... found creating objs/Makefile Configuration summary + using system PCRE library + using system OpenSSL library + md5: using OpenSSL library + sha1: using OpenSSL library + using system zlib library nginx path prefix: "/home/nginx" nginx binary file: "/home/nginx/sbin/nginx" (생략)
그리고 make, make install까지 실행하면 HTTPS를 사용할 수 있는 Nginx가 됩니다.
nginx.conf를 보면 다음과 같은 설정 예제가 있습니다. 물론 이 예제 설정 자체는 --with-http_ssl_module 옵션을 주지 않았더라도 기본 설정 파일에 포함되어 있을 수 있습니다.
인증서 경로와 서버 이름 등을 적절히 수정하여 사용하시면 됩니다. 단, 아래 예제는 Nginx 1.4.5 당시의 기본 예제에 가까우므로 실제 운영 환경에서는 사용하는 OpenSSL/Nginx 버전에 맞춰 SSL 프로토콜과 cipher 설정을 다시 점검하는 것이 좋습니다.
# HTTPS server
#
#server {
# listen 443;
# server_name localhost;
# ssl on;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_timeout 5m;
# ssl_protocols SSLv2 SSLv3 TLSv1;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
컴파일된 바이너리에 SSL 모듈이 포함되었는지는 다음처럼 확인할 수 있습니다.
# /home/nginx/sbin/nginx -V (생략) configure arguments: --prefix=/home/nginx --with-http_ssl_module
3. --with-zlib=
이 옵션은 압축 기능에 사용되는 zlib 소스 경로를 지정하는 컴파일 옵션입니다. Nginx의 gzip 기능은 ngx_http_gzip_module에서 제공하며, 이 모듈은 일반적으로 기본 포함됩니다. 다만 zlib을 시스템 라이브러리 대신 특정 소스 디렉터리에서 함께 빌드하고 싶을 때 --with-zlib= 옵션을 사용합니다.
= 뒤에는 설치된 라이브러리 디렉터리가 아니라 zlib 소스 디렉터리 경로를 기술합니다.
처음에는 zlib이 설치되어 있는지, 있다면 어디 있는지 몰라서 그냥 yum으로 다시 한번 설치하려 했습니다.
# yum install zlib Loaded plugins: fastestmirror, refresh-packagekit Loading mirror speeds from cached hostfile * base: ftp.daum.net * extras: ftp.daum.net * updates: ftp.daum.net base | 3.7 kB 00:00 extras | 3.4 kB 00:00 updates | 3.4 kB 00:00 Setting up Install Process Package zlib-1.2.3-29.el6.x86_64 already installed and latest version Nothing to do
이미 설치되어 있다는군요.
그런데 Nginx 소스 디렉터리에서 찾아보니 다음과 같은 파일들이 있습니다.
# find . -name "*zlib*" ./auto/lib/zlib ./auto/lib/zlib/patch.zlib.h
뭔가 있습니다. 이들을 이용하여 컴파일을 해보도록 하겠습니다.
# ./configure --prefix=/home/nginx --with-zlib=./auto/lib/zlib (생략) Configuration summary + using system PCRE library + OpenSSL library is not used + md5: using system crypto library + sha1: using system crypto library + using zlib library: ./auto/lib/zlib (생략)
configure는 성공했고, 이어서 make를 실행하였습니다.
# make (생략) cd ./auto/lib/zlib \ && make distclean \ && CFLAGS="-O2 -fomit-frame-pointer -pipe " CC="cc" \ ./configure \ && make libz.a make[2]: Entering directory `/down/nginx/nginx-1.4.5/auto/lib/zlib' make[2]: *** 타겟 `distclean'를 만들 규칙이 없음. 멈춤. make[2]: Leaving directory `/down/nginx/nginx-1.4.5/auto/lib/zlib' make[1]: *** [auto/lib/zlib/libz.a] 오류 2 make[1]: Leaving directory `/down/nginx/nginx-1.4.5' make: *** [build] 오류 2
실패합니다. 저 디렉터리는 zlib 소스 전체가 아니라 Nginx 빌드 과정에서 사용하는 보조 파일이 있는 위치라서, --with-zlib=에 지정할 대상이 아닌가 봅니다.
그래서 zlib.net 홈페이지에 가서 1.2.8 소스(tar.gz)를 다운로드 받기로 합니다. 적절한 위치에 풀고, 다시 시도합니다.
# ./configure --prefix=/home/nginx --with-zlib=../zlib-1.2.8 (생략) Configuration summary + using system PCRE library + OpenSSL library is not used + md5: using system crypto library + sha1: using system crypto library + using zlib library: ../zlib-1.2.8 (생략)
다시 make 합니다.
# make (생략) make[1]: Leaving directory `/down/nginx/nginx-1.4.5' make -f objs/Makefile manpage make[1]: Entering directory `/down/nginx/nginx-1.4.5' sed -e "s|%%PREFIX%%|/home/nginx|" \ -e "s|%%PID_PATH%%|/home/nginx/logs/nginx.pid|" \ -e "s|%%CONF_PATH%%|/home/nginx/conf/nginx.conf|" \ -e "s|%%ERROR_LOG_PATH%%|/home/nginx/logs/error.log|" \ < man/nginx.8 > objs/nginx.8 make[1]: Leaving directory `/down/nginx/nginx-1.4.5'
성공이네요. 이어진 make install은 전광석화 같은 속도로 끝납니다.
nginx.conf 안의 gzip 설정은 다음과 같습니다.
#gzip on;
기본값은 off이므로 기능을 사용하려면 명시적으로 on으로 바꿔야 합니다.
gzip on;
gzip on일 때 기본적으로 압축이 적용되는 MIME 타입은 text/html입니다. 다른 타입에도 적용하려면 gzip_types 지시어를 추가로 설정해야 합니다.
설정 변경 후에는 다음처럼 설정 문법을 확인하고 Nginx를 재시작하거나 reload하여 반영하면 됩니다.
# /home/nginx/sbin/nginx -t # /home/nginx/sbin/nginx -s reload