Server

[Apache] Proxy(Reverse Proxy / Forward Proxy)란?

로아다 2023. 12. 11. 16:34
728x90
반응형

💡 프록시(Proxy)란?

- 클라이언트가 자신을 통해 다른 네트워크로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램

- 서버 ↔ 서버 사이의 중계 역할

 

 

 

🔎 프록시를 사용하는 이유

 

보안상의 이유로 직접 통신할 수 없는 두 서버 사이에서 대리로 통신을 수행하여 보안, 성능, 안정성이 향상된다.

 

프록시(Proxy)의 일반적인 구조

 

 

 

💡 Forward Proxy(포워드 프록시)

- 클라이언트 바로 뒤에 놓여있는 구조

- 같은 내부망에 존재하는 클라이언트의 요청을 받으면 인터넷을 통해 외부 서버에서 데이터를 가져와 클라이언트에게 응답

1. 클라이언트가 타겟 서버의 주소를 프록시에 전달

2. 포워드 프록시가 인터넷으로 요청된 내용을 클라이언트에게 응답

 

ex: naver.com 을 요청하면 포워드 프록시 서버가 naver.com 리소스를 대신 받아와서 클라이언트에게 내민다.

 

🔎 우리가 흔히 말하는 '프록시 서버'가 포워드 프록시(Forward Proxy)다.

 

 

Forward Proxy의 구조

 

 

 

😊 포워드 프록시의 장점

1. 클라이언트 보안(Security)

- 방화벽과 같은 개념으로 접근 권한 제한 기능 존재

- 포워드 프록시 서버에 룰을 추가해서 특정 사이트에 접속하는 것을 막을 수 있다.

 

2. 캐싱(Caching)

- 클라이언트가 어떤 웹 페이지에 접근하면 프록시 서버는 해당 페이지의 서버 정보를 캐싱(임시보관)한다.

- 보관된 서버 정보를 그대로 반환하여 서버 부하를 줄일 수 있다.

 

3. 암호화(Encrytion)

- 클라이언트 요청은 포워드 프록시 서버를 통과할 때 암호화가 된다.

- 암호화 된 요청은 다른 서버를 통과할 때 클라이언트 IP를 감춰주는 효과를 내준다.

- IP 추적을 해도 포워드 프록시 서버 IP만 보인다.

 

 

 

 

 

💡 Reverse Proxy(리버스 프록시)

- 웹서버/WAS 앞에 놓여있는 구조

- 클라이언트가 요청 시 프록시로 요청을 보내고 프록시가 배후(reverse) 서버로부터 데이터를 가져온다.

 

클라이언트에게 데이터를 밀어주는게 포워드 프록시, 서버 쪽으로 데이터를 밀어주는 것이 리버스 프록시

 

Reverse Proxy의 구조

 

 

 

🔎 리버스 프록시를 사용하는 이유

- 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>

 

 

 

 

[출처]

https://inpa.tistory.com/entry/NETWORK-%F0%9F%93%A1-Reverse-Proxy-Forward-Proxy-%EC%A0%95%EC%9D%98-%EC%B0%A8%EC%9D%B4-%EC%A0%95%EB%A6%AC#%ED%8F%AC%EC%9B%8C%EB%93%9C_%ED%94%84%EB%A1%9D%EC%8B%9C_vs_%EB%A6%AC%EB%B2%84%EC%8A%A4_%ED%94%84%EB%A1%9D%EC%8B%9C_%EC%B0%A8%EC%9D%B4%EC%A0%90

 

🌐 Reverse Proxy / Forward Proxy 정의 & 차이 정리

프록시(Proxy) 란? 프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다. 프록시(Proxy)란 '대리'

inpa.tistory.com

 

728x90
반응형