Nginx에 SSL 적용 및 Reverse Proxy 설정
애플리케이션에 SSL 인증서를 직접 적용하는 대신 Nginx에 SSL을 설정하면, Nginx 뒤의 모든 애플리케이션에 SSL이 적용되어 매우 유용합니다. 본 문서에서는 Nginx에 SSL을 설정하고 Reverse Proxy를 구성하는 방법을 설명합니다.
환경
- 운영 체제: Ubuntu 18 이상
- Reverse Proxy 대상 포트:
- 3000 (Frontend)
- 8080 (AI 서비스)
- 8081 (Backend)
1. SSL 인증서 파일 준비
SSL 인증서를 SSL For Free
등을 통해 발급받은 경우, 다음과 같은 3개의 파일이 제공됩니다:
certificate.crt
private.key
ca_bundle.crt
이 파일들을 /etc/nginx/ssl
디렉토리로 복사합니다.
2. Nginx 설정 파일 수정
2.1 백업 파일 생성
Nginx 설정 파일은 /etc/nginx/sites-available/default
에 위치합니다. 변경 전에 기존 파일을 백업해 두는 것이 좋습니다:
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak
2.2 기본 설정 변경
Nginx는 기본적으로 /etc/nginx/sites-available
디렉토리에 있는 모든 파일을 읽습니다. 특정 파일만 읽도록 설정하려면 /etc/nginx/nginx.conf
파일을 수정해야 합니다. 하단에 위치한 다음 부분을 확인합니다:
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
위 내용을 다음과 같이 수정합니다:
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/default;
3. SSL 및 Reverse Proxy 설정
/etc/nginx/sites-available/default
파일을 다음과 같이 수정합니다:
server {
listen 80;
server_name example.com www.example.com;
# HTTP 요청을 HTTPS로 리다이렉트
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.com www.example.com;
# SSL 인증서 경로
ssl_certificate /etc/nginx/ssl/certificate.crt;
ssl_certificate_key /etc/nginx/ssl/private.key;
ssl_trusted_certificate /etc/nginx/ssl/ca_bundle.crt;
# SSL 프로토콜 및 암호화 방식 설정
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# Reverse Proxy 설정
location / { # 루트 요청을 Frontend로 전달
proxy_pass http://localhost:3000/;
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;
}
location /ai/ { # /ai 요청을 AI 서비스로 전달
proxy_pass http://210.115.229.219:8080/;
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;
}
location /be/ { # /be 요청을 Backend로 전달
proxy_pass http://localhost:8081/;
proxy_set_header Upgrade $http_upgrade; # WebSocket 지원
proxy_set_header Connection "upgrade";
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;
}
}
WebSocket 지원
/be/
경로의 WebSocket 지원을 위해 다음 설정을 추가했습니다:
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
해당 프로젝트에서 WebRTC Signaling 서버가 WebSocket 프로토콜을 사용하기 때문에 필요한 설정입니다. HTTP만 사용하는 경우에는 생략할 수 있습니다.
4. 설정 확인 및 적용
Nginx 설정 파일에 오류가 없는지 확인합니다:
sudo nginx -t
오류가 없다면 Nginx를 재시작하여 변경 사항을 적용합니다:
sudo systemctl restart nginx
위와 같은 설정을 통해 Nginx를 사용한 SSL Reverse Proxy 구성을 완료할 수 있습니다.
'DevOps' 카테고리의 다른 글
[Spring Boot + MySQL] docker-compose 세팅 (1) | 2024.09.02 |
---|---|
minikube service 외부 접속 안되는 이유 (0) | 2024.08.27 |
Jenkins CI/CD with github (0) | 2024.06.07 |
Docker에 nginx 컨테이너 올리기 (0) | 2024.03.28 |