💡 프록시(Proxy)란?
- 클라이언트가 자신을 통해 다른 네트워크로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램
- 서버 ↔ 서버 사이의 중계 역할
🔎 프록시를 사용하는 이유
보안상의 이유로 직접 통신할 수 없는 두 서버 사이에서 대리로 통신을 수행하여 보안, 성능, 안정성이 향상된다.
💡 Forward Proxy(포워드 프록시)
- 클라이언트 바로 뒤에 놓여있는 구조
- 같은 내부망에 존재하는 클라이언트의 요청을 받으면 인터넷을 통해 외부 서버에서 데이터를 가져와 클라이언트에게 응답
1. 클라이언트가 타겟 서버의 주소를 프록시에 전달
2. 포워드 프록시가 인터넷으로 요청된 내용을 클라이언트에게 응답
ex: naver.com 을 요청하면 포워드 프록시 서버가 naver.com 리소스를 대신 받아와서 클라이언트에게 내민다.
🔎 우리가 흔히 말하는 '프록시 서버'가 포워드 프록시(Forward Proxy)다.
😊 포워드 프록시의 장점
1. 클라이언트 보안(Security)
- 방화벽과 같은 개념으로 접근 권한 제한 기능 존재
- 포워드 프록시 서버에 룰을 추가해서 특정 사이트에 접속하는 것을 막을 수 있다.
2. 캐싱(Caching)
- 클라이언트가 어떤 웹 페이지에 접근하면 프록시 서버는 해당 페이지의 서버 정보를 캐싱(임시보관)한다.
- 보관된 서버 정보를 그대로 반환하여 서버 부하를 줄일 수 있다.
3. 암호화(Encrytion)
- 클라이언트 요청은 포워드 프록시 서버를 통과할 때 암호화가 된다.
- 암호화 된 요청은 다른 서버를 통과할 때 클라이언트 IP를 감춰주는 효과를 내준다.
- IP 추적을 해도 포워드 프록시 서버 IP만 보인다.
💡 Reverse Proxy(리버스 프록시)
- 웹서버/WAS 앞에 놓여있는 구조
- 클라이언트가 요청 시 프록시로 요청을 보내고 프록시가 배후(reverse) 서버로부터 데이터를 가져온다.
클라이언트에게 데이터를 밀어주는게 포워드 프록시, 서버 쪽으로 데이터를 밀어주는 것이 리버스 프록시
🔎 리버스 프록시를 사용하는 이유
- WAS는 DB와 연결되어 있으므로, WAS가 해킹당할 경우 DB서버까지 해킹당할 수 있는 문제가 발생
- 리버스 프록시 서버를 DMZ에 두고 실제 서비스 서버는 내부망에 위치하도록 하는 것이 일반적이다.
💡 DMZ란?
내부네트워크/외부네트워크에 둘다 접근할 수 있는 공간
💡 참고
우리가 구성하는 일반적인 WEB(Apache) - WAS(Tomcat) 분리 형태를 Reverse 프록시라고 보면 된다.
여기서 WEB(Apache)이 reverse proxy 역할이다.
아파치 톰캣 같이 물리적인 한 서버에 WEB과 WAS가 올라가면 reverse proxy라고 볼 수 없다.
😊 리버스 프록시의 장점
1. 로드 밸런싱(Load Balancing, 부하분산)
- 리버스 프록시 서버를 본 서버 앞에 두면 특정 서버가 과부화되지 않게 로드밸런싱이 가능하다.
2. 서버 보안(Security)
- 본래 서버 IP 주소를 감출 수 있다. (DDos 같은 공격을 막는데 유용)
1. 클라이언트 인터넷을 통해 리버스 프록시로 요청을 보낸다.
2. 리버스 프록시 서버는 본 서버에게 요청을 경유해서 보낸다.
3. 클라이언트는 본 서버의 url을 모른 채 리버스 프록시 url을 통해 서비스를 이용한다. (본 서버의 주소를 감춘다.)
💡 포워드 프록시와 리버스 프록시의 차이점은?
1. 프록시 서버 위치
Forward Proxy : 클라이언트 앞
Reverse Proxy : WEB Server / WAS 앞
2. 프록시 서버 통신 대상
F : 내부망에서 클라이언트와 Proxy 서버가 통신
R : Proxy 서버와 내부망 서버가 통신
3. 감춰지는 대상
F : 프록시 서버에 요청 후 프록시가 서버에 요청을 보냄 (클라이언트 정보를 감춘다.)
R : 프록시 서버 URL로만 접근이 가능 (본 서버의 IP를 감춘다.)
💡 Apache Proxy 설정하는 방법
1. 해당 아파치 경로로 접속 vi /etc/httpd/conf/httpd.conf 열기
vi /etc/httpd/conf/httpd.conf
2. httpd.conf에 존재하는 proxy 모듈 활성화 (주석처리 된 부분을 주석 해제)
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
Include conf/extra/httpd-vhosts.conf
3. VirtualHost 부분 수정하기
<VirtualHost *:80>
# Forward Proxy 경우 On / Reverse Proxy Off
ProxyRequests Off
# 호스트가 받은 HTTP 요청을 Proxy 요청시 사용
# Reverse 경우 On으로 해야함
ProxyPreserveHost On
# Proxy에 연결할 URL
# ServerHost:localhost -> Apache -> ProxyPass URL
ProxyPass / http://192.168.10.146:8080/service/ # 뒤에 슬래쉬는 붙여줘야함
# WAS 가 redirect HTTP 응답을 보냈을 경우 Location, Content-Location HTTP 헤더를 수정 클라이언트에 전달한다.
# reverse proxy가 이 헤더를 수정하지 않으면 클라이언트는 redirect 시 제대로 연결할 수 없으므로 꼭 설정해야 한다.
ProxyPassReverse / http://192.168.10.146:8080/service/
# 로드밸런싱 - 경로 분기
<Location /html>
ProxyPass http://192.168.10.146:8080/html/
ProxyPassReverse http://192.168.10.146:8080/html/
</Location>
<Location /user>
ProxyPass http://192.168.10.146:8080/user/
ProxyPassReverse http://192.168.10.146:8080/user/
</Location>
</VirtualHost>
[출처]
'Server' 카테고리의 다른 글
Tomcat 안에 있는 각 폴더의 의미 (0) | 2024.11.04 |
---|---|
오토 스케일링(Auto Scaling)이란? (0) | 2024.02.13 |
WAS와 웹 서버의 차이점 (0) | 2023.11.22 |
Polling / long-polling / Web Socket / Sever-Sent Event (Push) 정리 (1) | 2023.11.21 |