Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.
또 Nginx를 만나게 됐다 . . .
전 직장에서 프론트엔드 웹 서버 직접 올려야됐을 때 이후로 처음 만나는건데 지금도 프론트엔드 웹 서버 직접 올리고 proxy 설정해야돼서 복습하고 메모하려고 벨로그 들어왔다.
개발자들이 다 퇴사하고 할 사람이 없을 때 직접 만지게 되는듯 (again)
그냥 이번 기회에 익숙해져야겠다

사내 서버 개발자분한테 사내 로드 밸런서 구성에 대한 설명을 들었는데 대충 구조는 이해했는데 구체적인, 아니면 몰랐던 부분에 대해서 GPT한테 물어봄
🧑💻 소포스가 하는 역할이 뭐고 ngnix로 어떻게 넘기는거야? 서로 연결 될 수 있어 원래?
1️⃣ 소포스(Sophos) 방화벽 역할
Sophos 방화벽은 외부에서 특정 포트로 접근할 때 다음과 같은 보안 기능을 수행해.
✅ 트래픽 필터링: 특정 IP, 포트, 프로토콜에 따라 허용/차단
✅ WAF(Web Application Firewall) 기능: 웹 요청을 검사하고, 악성 트래픽 차단
✅ 포트 포워딩(Port Forwarding) 설정 가능: 특정 포트로 들어온 요청을 내부 서버(Nginx)로 전달
✅ VPN 지원: 내부 네트워크에 안전하게 접속하도록 설정 가능
✅ IPS/IDS 기능: 침입 탐지 및 방지 시스템으로 보안 위협 탐지2️⃣ 소포스 방화벽 → Nginx 프록시 연결 방식
외부에서 특정 IP와 포트(예: 123.1.1.1:8080)로 접근하면, Sophos 방화벽이 이 요청을 먼저 받고, 설정에 따라 Nginx로 넘겨.
📌 흐름 예시
1. 클라이언트가 123.1.1.1:8080으로 접속 2. Sophos 방화벽이 트래픽을 감시하고, 필터링 규칙을 적용 3. 허용된 요청이면 포트 포워딩을 통해 Nginx 리버스 프록시로 전달 4. Nginx가 요청을 받아서 실제 웹 서버(예: app.example.com)로 전달 5. 웹 서버가 응답을 보내고, 다시 같은 경로를 통해 클라이언트로 반환📌 예제 구성
[Client] → [Sophos Firewall] → [Nginx Reverse Proxy] → [Web Server]3️⃣ 소포스와 Nginx는 어떻게 연결되나?
Sophos 방화벽에서 DNAT(포트 포워딩) 설정을 하면 Nginx와 연결할 수 있어.🚀 설정 방식 (예제)
✅ Sophos 방화벽에서 포트 포워딩 설정
- 외부 123.1.1.1:8080 → 내부 192.168.1.10:80 (Nginx)
✅ Nginx에서 프록시 설정
- Nginx가 받은 요청을 백엔드 웹 서버(192.168.1.20:3000)로 전달
📌 Nginx 설정 예시 (/etc/nginx/nginx.conf)
server { listen 80; server_name example.com; location / { proxy_pass http://192.168.1.20:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }이렇게 하면 Sophos 방화벽 → Nginx → 웹 서버로 트래픽이 흐르게 돼.



(가로 엄청 길게 넣으니까 벨로그에서 뵈지도 않아서 조각조각 잘라 넣음 ㄱ-)
구체적으로 더 물어보고 서버 개발자분한테 들은 정보랑 합쳐놓으니까 구체적으로는 이런 그림인 것 같음.
저 Virtual Host 자리에 실물 컴퓨터를 배치하면 로드 밸런서 역할에 가깝고, 내가 구성해보려는 서비스에 할당된 Nginx는 프록시 역할만 하는 것에 가깝다고 설명 들었다.
구성은 진짜 여러가지로 할 수 있는데, Nginx를 여러 대 둘 수도 있고, Nginx로 오기 전에 '통신'에 유리한 컴퓨터를 설치해두고 Nginx에 올려두는 서버로는 '처리'에 유리한 컴퓨터를 연결해둘 수도 있다고 하셨다.
443 포트만 열 수 있다고 하셔서 왜지? 했는데 브라우저(클라이언트)가 자동으로 정하는 HTTP/HTTPS 프로토콜의 기본 포트 규칙이라고 함
http://app.example.com 요청 → 기본적으로 80 포트로 접속
https://app.example.com 요청 → 기본적으로 443 포트로 접속
DNS가 포트까지 알려주는 줄 알았는데 아니었다 😅