리버스 프록시는 클라이언트의 요청을 대신 받아서 내부망에 있는 실제 서버(WAS)로 전달하고, 그 응답을 다시 클라이언트에게 전달하는 중개 서버입니다.
클라이언트는 자신이 실제 WAS가 아닌 리버스 프록시 서버와 통신하고 있음을 알지 못합니다.
왜 필요한가?:
Nginx: 뛰어난 성능과 낮은 메모리 사용량 덕분에 리버스 프록시 서버로 매우 널리 사용됩니다.
Nginx 설치 (Amazon Linux/CentOS 기준):
sudo yum install -y nginx
Nginx 서비스 시작 및 활성화:
sudo systemctl start nginx
sudo systemctl enable nginx
방화벽 설정: 외부에서 HTTP(80) 및 HTTPS(443) 포트로 접근할 수 있도록 방화벽(AWS 보안 그룹 등)을 열어주어야 합니다.
Nginx의 설정 파일을 수정하여, 특정 도메인으로 들어온 요청을 내부에서 실행 중인 Spring Boot 애플리케이션으로 전달하도록 구성합니다.
설정 파일 위치: /etc/nginx/nginx.conf 또는 /etc/nginx/conf.d/default.conf
# /etc/nginx/conf.d/my-app.conf
server {
# 1. 외부에서 요청을 받을 포트
listen 80;
# 2. 이 설정이 적용될 도메인 이름
server_name my-app.com;
# 3. '/' 경로로 들어오는 모든 요청을 처리
location / {
# 4. 요청을 http://127.0.0.1:8080 (로컬에서 실행 중인 Spring Boot WAS)로 전달
proxy_pass http://127.0.0.1:8080;
# 5. 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;
}
}
listen 80: 80번 포트(HTTP)로 들어오는 요청을 받습니다.server_name: my-app.com 도메인으로 들어온 요청에 대해서만 이 설정을 적용합니다.location /: 해당 도메인의 모든 경로(/)에 대한 요청을 처리합니다.proxy_pass: 이 설정의 핵심. 요청을 지정된 주소로 전달합니다. 127.0.0.1:8080은 현재 서버에서 8080 포트로 실행 중인 Spring Boot 애플리케이션을 의미합니다.proxy_set_header: WAS가 리버스 프록시 뒤에 있다는 사실을 인지하고, 클라이언트의 실제 IP 주소, 요청 프로토콜(http/https) 등을 올바르게 처리할 수 있도록 관련 정보를 HTTP 헤더에 담아 전달하는 중요한 설정입니다.설정 파일을 수정한 후에는 문법에 오류가 없는지 확인하고, Nginx 서비스를 재시작하여 변경 사항을 적용해야 합니다.
# 설정 파일 문법 검사
sudo nginx -t
# Nginx 재시작
sudo systemctl restart nginx
my-app.conf)의 proxy_pass 주소를 127.0.0.1:8081로 동적으로 변경합니다.sudo systemctl reload nginx 명령어를 실행하여, 서비스를 중단하지 않고 변경된 설정만 다시 불러옵니다. 이 순간부터 모든 새로운 요청은 신규 버전(8081)으로 전달됩니다.proxy_pass 지시어를 통해 간단하게 설정할 수 있습니다.proxy_set_header 설정은 WAS가 클라이언트의 실제 정보를 올바르게 인식하도록 돕는 중요한 부분입니다.