반응형
[root@master13 ~]# cat /etc/nginx/sites-available/eunbie.site
# HTTP 요청은 HTTPS로 리디렉션
server {
listen 80;
server_name eunbie.site;
return 301 https://$host$request_uri;
}
# HTTPS 요청 처리 → Ingress NodePort로 프록시
server {
listen 443 ssl;
server_name eunbie.site;
ssl_certificate /etc/letsencrypt/live/eunbie.site/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/eunbie.site/privkey.pem;
location / {
proxy_pass http://127.0.0.1:30080; # Ingress의 80번 NodePort
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;
}
}
1. 구성 파일 위치와 목적
- /etc/nginx/sites-available/eunbie.site
→ Nginx 웹 서버가 eunbie.site라는 도메인으로 들어오는 요청을 어떻게 처리할지 정하는 설정 파일이에요.
2. 현재 적용된 설정은 아래 두 개!
✅ (1) HTTP 요청은 HTTPS로 리디렉션
server {
listen 80;
server_name eunbie.site;
return 301 https://$host$request_uri;
}
- 역할:
- 사용자가 **http://eunbie.site**로 접속하면,
- 자동으로 https://eunbie.site로 보내줍니다 (즉, 보안 연결(HTTPS)로 강제 이동!)
- 비유:
- "일반문(80번 문)으로 오면, 보안문(443번 문)으로 다시 안내!"
- **HTTP(80)**은 암호화가 없고, **HTTPS(443)**은 암호화된 접속을 사용합니다.
✅ (2) HTTPS 요청은 Ingress(NodePort)로 전달 (Reverse Proxy)
server {
listen 443 ssl;
server_name eunbie.site;
ssl_certificate /etc/letsencrypt/live/eunbie.site/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/eunbie.site/privkey.pem;
location / {
proxy_pass http://127.0.0.1:30080; # Ingress의 80번 NodePort
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 443 ssl;
- 443번(HTTPS) 포트에서 암호화 통신(SSL)을 받겠다!
- server_name eunbie.site;
- 도메인 이름이 eunbie.site인 요청만 해당 설정이 적용.
- SSL 인증서 경로
- ssl_certificate: 인증서 파일 경로
- ssl_certificate_key: 인증서 키 파일 경로
→ Let's Encrypt에서 발급한 SSL 인증서를 사용함.
- location / { ... }
- 모든 경로(/로 시작하는 모든 요청)에 대해 아래 설정을 적용.
- proxy_pass http://127.0.0.1:30080;
- 실제 처리는 로컬 호스트(127.0.0.1)의 30080 포트로 전달합니다.
- 여기서 30080 포트는 Kubernetes Ingress의 NodePort로,
Ingress가 받은 요청을 다시 클러스터 내부 서비스(React, Node.js 등)로 분배합니다.
- proxy_set_header ...
- 프록시(중간 서버)로서,
**원래의 요청 정보(도메인, 클라이언트 IP 등)**를 뒷단에 전달하도록 세팅
- 프록시(중간 서버)로서,
🚦 전체 동작 흐름
- 사용자가 브라우저에 eunbie.site 입력 (http/https 구분 없음)
- **http://eunbie.site → https://eunbie.site**로 자동 리디렉션
- https://eunbie.site 접속
- Nginx가 SSL 인증서로 암호화 처리
- 모든 경로 요청을 127.0.0.1:30080(=Ingress NodePort)로 프록시 전송
- Ingress가 다시 요청 경로를 분석해서, React/Node.js로 분배
💡 이 구조를 왜 쓰나요?
- Let's Encrypt로 직접 인증서를 발급받아,
SSL 처리를 OS 레벨 Nginx가 전담합니다. - Kubernetes Ingress는 외부에서 바로 접근이 어려우므로,
Nginx가 ‘문지기’가 되어, HTTPS 처리를 한 뒤 Ingress로 요청을 넘겨줍니다. - 이 구조는 Kubernetes + Nginx + HTTPS 보안을 동시에 만족하는
실무에서 많이 사용하는 방식입니다.
✨ 쉽게 요약
- 80번(HTTP)으로 들어온 모든 방문자 → 443번(HTTPS)로 보냄 (강제 보안)
- 443번(HTTPS)으로 들어오면,
Nginx가 먼저 암호화 해제 → Ingress로 요청을 넘겨줌
(Ingress는 NodePort로 열려 있어야 하고, 127.0.0.1:30080 등 포트를 사용)
반응형
'study' 카테고리의 다른 글
| 네트워크는 어떻게 통신할까? – IP, 포트, 패킷의 개념 (0) | 2025.07.13 |
|---|---|
| [Kubernetes] 마스터 노드가 NotReady였던 이유? containerd cgroup 설정으로 해결! (1) | 2025.07.10 |
| “자물쇠 속 숨은 암호 기술” — SSL, TLS, SSH 안에 암호화 알고리즘이 있다고? (1) | 2025.07.09 |
| 협업이 쉬워지는 개발 표기법 (2) | 2025.07.04 |
| 인터넷 (0) | 2025.07.01 |