웹서버에서 Virtual Host 셋팅을 통해 80하나의 포트로 두 개 이상의 사이트를 운영 할 수 있습니다. 아래의 본문에서 nginx Virtual Host(가상호스트) 셋팅하는 방법을 다뤄 보겠습니다.
Virtual Host 의 정의
Virtual Host란 하나의 웹서버에서 포트 제한 없이 두개 이상의 홈페이지를 운영할 수 있는 기술입니다.
아주 오랜 옛날 Virtual Host가 없을 때에는 80 포트 하나로 하나의 사이트만 운영이 가능했었습니다. 두개 이상의 사이트를 운영하려면 80 포트 이외 8080같은 비공식 포트를 이용해야 했지요. Virtual Host 개념이 생긴 이후에는 웹서버가 도메인 네임(서버네임)을 인식하여 각기 사이트로 스위칭 가능해 졌습니다. 80포트 하나로 여러개의 사이트를 운영할 수 있게 된 것입니다.
사실 Virtual Host 라는 단어는 아파치에서 사용하는 용어이고 nginx에서는 server 블록이라고 하는 것이 더 정확한 표현입니다. 하지만 현실에서는 큰 구분 없이 쓰이고 있습니다.
nginx 에서 Virtual Host 방법
http {
server {
listen 80; #80 포트에서
server_name A_domain.com; #A_domain.com 이 감지되면
access_log /www/logs/access_A.log; #access 로그는 여기에 저장하고
error_log /www/logs/error_A.log error; #err 로그는 여기에 저장하고
root /www/A_domain/; # 여기 폴더로 연결한다
index index.php; # 기본페이지는 index.php로 한다.
}
}
server {
listen 80; #80 포트에서
server_name A_domain.com; #B_domain.com 이 감지되면
access_log /www/logs/access_B.log; #access 로그는 여기에 저장하고
error_log /www/logs/error_B.log error; #err 로그는 여기에 저장하고
root /www/B_domain/; # 여기 폴더로 연결한다
index index.php; # 기본페이지는 index.php로 한다.
}
}
위는 Virtual Host 사용 예시입니다.
아파치에서는 기본 호스트가 있고 Virtualhost 를 덧붙이는 형태인데 nginx는 그냥 server 블록 하나가 하나의 호스트를 의미 합니다. 위의 주석 설명을 참고하세요.
여러개의 Server 블록을 만들고 그안에 server_name(도메인) 과 root 경로만 지정해 주면 되는 간단한 구조 입니다.
참고로 리눅스 nginx 의 경우 Virtual Host를 위해 새로운 폴더를 만든 후에 폴더에 접근할 수도 있도록 해당 폴더 permission을 chmod -R 755 로 변경하여 폴더 사용 권한을 주셔야 합니다. 윈도우 nginx는 해당 없습니다.