1. 개요
지난 번 포스팅을 통해 OS X에서 Nginx 1.4.4를 설치하여 보았습니다.
강철지그님께서는 계속 작업을 해주고 계십니다.
한편 왜 Nginx를 써야 하는지도 언급된 적이 있지요. 이번에는 설정 파일인 nginx.conf의 주요 설정을 확인해 보고 또 변경해 보고자 합니다.
2. Listen Port 설정
기본 포트는 80입니다. 하지만 모든 경우에 80을 사용하지는 않습니다. 이 기본 포트를 변경하려면 conf/nginx.conf의 listen을 수정합니다.
server { listen 80; ...... }
위의 80 대신에 원하는 Listen Port를 적으면 됩니다.
3. Document Root 설정
root를 확인합니다. default는 html 디렉토리 입니다.
location / { root html; index index.html index.htm; }
html 대신에 원하는 Document Root Directory를 적으면 됩니다.
4. 초기 페이지 설정
index를 확인합니다. default는 index.html 입니다.
location / { root html; index index.html index.htm; }
만일 index에 지정된 파일들이 존재하지 않는 경우 403 Forbidden 오류를 만나게 됩니다.
5. proxy_pass 설정
특정 확장자 요청을 넘기는 설정을 추가해 봅니다. 즉, Nginx 뒷 단에 Tomcat 등의 WAS 가 존재하는 경우이며, 확장자 기반으로 요청 처리를 분리하는 것입니다. 물론 Nginx-JBoss 연동도 가능합니다.
아래 예는 *.do 에 대하여 http://localhost:8080 으로 넘기는 것입니다.
location ~ \.do$ { proxy_pass http://localhost:8080; }
LoadBalancing 알고리즘도 확인해 보세요.
6. Sub Domain 설정
최초 설치 후의 nginx.conf를 보면 이렇습니다.
server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } ...... }
바로 본론부터 들어가서, 사이트에 2개의 Sub Domain을 추가한다고 해 봅시다.
- appsroot.com
- nginx1.appsroot.com (추가!)
- nginx2.appsroot.com (추가!)
server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root /home/nginx; index index.html index.htm; } ...... } server { listen 80; server_name nginx1.appsroot.com; location / { root /home/nginx1; index index.html index.htm; } } server { listen 80; server_name nginx2.appsroot.com; location / { root /home/nginx2; index index.html index.htm; } }
server block이 2개 추가되었고 각각 nginx1.appsroot.com (/home/nginx1), nginx2.appsroot.com (/home/nginx2)의 역할을 담당하고 있습니다.
그리고 default 값을 사용하는 경우는 명시적으로 설정하지 않아도 무관합니다. listen의 80, index의 index.html 등 말입니다.
server { server_name nginx2.appsroot.com; location / { root /home/nginx2; } }
이렇게 해도 됩니다.
7. access log 설정
access_log를 확인합니다. default 는 logs/access.log 입니다. 앞서 설명한 Sub Domain (Virtual Host) 로 분리되어 있어도 별도로 access log 설정을 하지 않으면 하나의 access.log 파일로 쌓입니다.
# ls -tlr total 136 -rw-r--r-- 1 nginx staff 42485 Feb 23 03:29 access.log -rw-r--r-- 1 nginx staff 20064 Feb 23 13:35 error.log -rw-r--r-- 1 nginx staff 6 Feb 23 13:35 nginx.pid
각 server 별로 log를 분리합니다.
server { listen 80; server_name localhost; #charset koi8-r; access_log logs/host.access.log; ...... } server { #listen 80; server_name nginx1.appsroot.com; access_log logs/nginx1.access.log; ...... } server { #listen 80; server_name nginx2.appsroot.com; access_log logs/nginx2.access.log; ...... }
그리고 다시 Nginx를 기동한 후 logs 디렉토리를 확인합니다.
# ls -tlr total 136 -rw-r--r-- 1 nginx staff 42485 Feb 23 03:29 access.log -rw-r--r-- 1 nginx staff 20125 Feb 23 13:38 error.log -rw-r--r-- 1 nginx staff 0 Feb 23 13:39 nginx2.access.log -rw-r--r-- 1 nginx staff 0 Feb 23 13:39 nginx1.access.log -rw-r--r-- 1 nginx staff 6 Feb 23 13:39 nginx.pid -rw-r--r-- 1 nginx staff 0 Feb 23 13:39 host.access.log
새롭게 host.access.log, nginx1.access.log, nginx2.access.log 파일이 생성되었습니다. (물론 아직 어떤 요청도 처리하지 않은 상태여서 0 바이트로 나오고 있습니다)
8. 주요 모듈
동적 모듈 컴파일에 대해서도 확인해보세요.