한대의 pc(서버)에서 리버스 프록시를 사용하어 두개의 망연결
내부망과 외부망의 트래픽을 수용하기 위해 설정하는 내용입니다.
외부에서 접근 가능한 **두 개의 물리 NIC(외부 네트워크 2개)**를 사용하여 Nginx 리버스 프록시를 구성하려면, 각각의 NIC에 맞는 Docker 네트워크를 생성하고 두 개의 Nginx 컨테이너를 각각의 네트워크에 바인딩하면 됩니다.
1. 네트워크 구성
NIC 정보 예시
eth0: 192.168.1.100 (외부망 #1 - ISP1)
eth1: 10.10.10.100 (외부망 #2 - ISP2)
• eth0: 외부 네트워크 1 (ISP 1) → nginx-external-1
• eth1: 외부 네트워크 2 (ISP 2) → nginx-external-2
2. Docker 네트워크 생성
각각의 물리 NIC(네트워크 카드)에 맞춰 Docker 브리지 네트워크를 생성합니다.
# 외부망 1 (ISP1) 네트워크
docker network create \
--driver=bridge \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
external_net1
# 외부망 2 (ISP2) 네트워크
docker network create \
--driver=bridge \
--subnet=10.10.10.0/24 \
--gateway=10.10.10.1 \
external_net2
3. Nginx 컨테이너 실행
1) 외부망 #1 (ISP1) 용 Nginx
docker run -d --name nginx-external-1 \
--network external_net1 \
--ip 192.168.1.100 \
-p 80:80 -p 443:443 \
-v /path/to/nginx-external-1.conf:/etc/nginx/nginx.conf \
nginx
nginx-external-1.conf 설정
events { }
http {
server {
listen 80;
server_name isp1.example.com;
location / {
proxy_pass http://backend_service_1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
• eth0(192.168.1.100)에서 들어오는 요청을 처리
2) 외부망 #2 (ISP2) 용 Nginx
docker run -d --name nginx-external-2 \
--network external_net2 \
--ip 10.10.10.100 \
-p 8080:80 -p 8443:443 \
-v /path/to/nginx-external-2.conf:/etc/nginx/nginx.conf \
nginx
nginx-external-2.conf 설정
events { }
http {
server {
listen 80;
server_name isp2.example.com;
location / {
proxy_pass http://backend_service_2;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
• eth1(10.10.10.100)에서 들어오는 요청을 처리
• 포트 80과 443을 8080, 8443으로 변경할 수도 있음
4. 백엔드 서비스 실행
docker run -d --name backend1 --network external_net1 --ip 192.168.1.200 myapp
docker run -d --name backend2 --network external_net2 --ip 10.10.10.200 myapp
5. 라우팅 및 방화벽 설정
1) eth0, eth1 각각 트래픽을 적절히 라우팅
# eth0 (ISP1)에서 들어오는 트래픽을 Nginx 컨테이너로 전달
sudo ip route add 192.168.1.0/24 dev eth0
# eth1 (ISP2)에서 들어오는 트래픽을 Nginx 컨테이너로 전달
sudo ip route add 10.10.10.0/24 dev eth1
2) 방화벽 설정
# eth0 (ISP1)에서 포트 80, 443만 허용
sudo iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
# eth1 (ISP2)에서 포트 8080, 8443만 허용
sudo iptables -A INPUT -i eth1 -p tcp --dport 8080 -j ACCEPT
sudo iptables -A INPUT -i eth1 -p tcp --dport 8443 -j ACCEPT
# 나머지 트래픽 차단
sudo iptables -A INPUT -j DROP
6. 정리
eth0 (192.168.1.100, ISP1) → nginx-external-1에서 처리 (80, 443 포트)
eth1 (10.10.10.100, ISP2) → nginx-external-2에서 처리 (8080, 8443 포트)
각각 다른 도메인 (isp1.example.com, isp2.example.com) 설정 가능
SSL 적용 가능 (certbot --nginx -d isp1.example.com -d isp2.example.com)
방화벽 설정으로 각 NIC에 대한 트래픽을 제한하여 보안 강화
이제 각각의 네트워크에서 들어오는 요청이 올바르게 분리되어 처리됩니다!