가상 호스트란 하나의 물리적인 서버(하나의 IP 주소)에서 여러 개의 다른 도메인 이름을 가진 웹사이트를 운영할 수 있게 해주는 기술입니다.
예시: example.com과 another-site.org라는 두 개의 다른 웹사이트를 서버 한 대로 동시에 서비스하는 것.
동작 원리:
Host: example.com)Host 헤더 값을 보고, 여러 server 블록 설정 중에서 server_name이 일치하는 설정을 찾아 해당 웹사이트의 콘텐츠를 응답합니다.Nginx에서는 server 블록 하나가 가상 호스트 하나에 해당합니다. nginx.conf 파일에 여러 개의 server 블록을 작성하여 가상 호스트를 구성할 수 있습니다.
관리의 용이성을 위한 설정 파일 분리:
server 블록을 nginx.conf에 다 넣으면 파일이 너무 길고 복잡해집니다./etc/nginx/conf.d/ 디렉토리 안에, 각 사이트별로 별도의 설정 파일(e.g., example.com.conf, another-site.org.conf)을 만들어 관리합니다. Nginx는 시작 시 이 디렉토리 안의 *.conf 파일들을 자동으로 모두 읽어들입니다.# /etc/nginx/conf.d/example.com.conf
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
# /etc/nginx/conf.d/another-site.org.conf
server {
listen 80;
server_name another-site.org;
root /var/www/another-site.org/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
로드 밸런싱 (Load Balancing):
보안 (Security):
SSL 암호화 처리 (SSL Offloading):
캐싱 (Caching):
location 블록 내에서 proxy_pass 지시어를 사용하여 요청을 전달할 내부 서버의 주소를 지정합니다.
# /etc/nginx/conf.d/my-app.conf
server {
listen 80;
server_name my-app.com;
# '/' 경로로 들어오는 모든 요청을 처리
location / {
# 요청을 http://127.0.0.1:8080 (로컬에서 실행 중인 Spring Boot WAS)로 전달
proxy_pass http://127.0.0.1:8080;
# 클라이언트의 실제 IP, 프로토콜 등의 정보를 WAS에 전달하기 위한 헤더 설정
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
proxy_set_header: WAS가 리버스 프록시 뒤에 있다는 사실을 인지하고, 클라이언트의 실제 IP 주소 등을 올바르게 로깅하거나 처리할 수 있도록 관련 정보를 HTTP 헤더에 담아 전달하는 중요한 설정입니다.
server_name 지시어를 사용하여, 하나의 서버에서 여러 도메인의 웹사이트를 운영할 수 있게 해주는 기술입니다.proxy_pass 지시어를 통해 간단하게 설정할 수 있습니다.