티스토리 뷰

[업데이트 2016.12.01 15:03]

 

만약 REST API WAS 서버를 구축하여 API를 open하게 될 때, 해당 WAS 서버에 대한 직접적인 접근을 허용하기에는 보안상 문제가 될 수 있습니다. 따라서 보통 REST API WAS 서버는 내부망에 위치하게 하고, Reverse Proxy 서버가 Client에서 요청한 REST API Request에 대해 대신 Response를 하게 됩니다.

 

Proxy는 Forward/Reverse Proxy 두가지가 있는데, 보통 Forward Proxy는 사내망 Client에서 외부에 있는 웹서버를 접근할 때 사용되며(미리 Proxy 지정이 필요함), Reverse Proxy는 Client에서 웹서버에 접근 할 때, 내부망에 위치한 WAS서버를 대신하여 요청한 Request에 대해 Response를 하는 구조입니다. 따라서 내부망에 있는 WAS서버와 분리가 되어 있기 때문에, 보안상 더 안전하게 됩니다. 

 

또한 REST API WAS 서버를 운영할 때, REST API 버전별로 다른 주소로 redirecting을 할 수 있기 때문에, 관리적인 측면에서도 유용합니다.

 

다음과 같이 Reverse Proxy와 REST API WAS 서버가 있다고 가정하였을 때, REST API 버전을 업데이트 하여 주소가 변경될 때, 사용자 입장에서는 동일한 주소로 REST API를 사용할 수 있습니다.

 

- Reverse Proxy Server: http://honeybeee.io/users/_search

 

- 내부 REST API v1.0 WAS서버: http://api.honeybeee.com/src/honeybeee/api/v1.0/users/_search

- 내부 REST API v2.0 WAS서버: http://api.honeybeee.com/src/honeybeee/api/v2.0/users/_search

 

만약 REST API 버전이 v2.0으로 변경 되었다면, 단순히 Reverse Proxy에서 .../v2.0으로 redirecting만 지정하면 됩니다. 사용자 입장에서는 여전히 http://honeybeee.io/users/_search 동일한 URL로 접근하면 됩니다.

 

* 참고: https://www.lesstif.com/pages/viewpage.action?pageId=21430345

* 참고: http://idess.tistory.com/6

* 참고: http://bcho.tistory.com/954

 

Apache에서도 Reverse Proxy기능을 지원하는데, 설정하는 방법에 대해 알아 보겠습니다.

현재 두 개의 물리적인 서버가 존재한다고 가정합니다.

 

<Reverse Proxy Apache 서버>

- DNS: honeybeee.io

- Port: 80 (Default Port)

 

<REST API WAS서버>

- DNS: api.honeybeee.com

- Port: 8100

 

1. Reverse Proxy Apache 서버에서 httpd.conf파일에 Proxy 모듈 사용 선언

Apache 서버에서 Proxy 기능을 사용하기 위해 아래의 모듈을 지정합니다.

 

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

 

2. Reverse Proxy Apache 서버에서 LISTEN 포트 확인하기

Reverse Proxy Apache 서버내의 httpd.conf파일에 위에서 가정한 80포트를 Listen 하는지 확인합니다. 만약 다른 포트로 지정하고자 한다면, 꼭 Listen을 지정해야 합니다.

 

ex) 8080사용

 

httpd.conf

 

...

Listen 8080

...

 

3. Reverse Proxy 선언

Reverse Proxy Apache 서버에서 httpd-vhosts.conf파일을 열은 후, 아래와 같이 가상호스트를 지정합니다. 아래의 의미는 해당 Reverse Proxy 서버의 주소 및 80포트로 접근시, REST API 서버의 특정 주소로 Client 요청을 넘긴 후, 결과값에 대해 Client에 다시 Response합니다. 

 

<VirtualHost *:80>

 

  ProxyPass / http://api.honeybeee.com:8100/src/honeybeee/api/v1.0/

  ProxyPassReverse  / http://api.honeybeee.com:8100/src/honeybeee/api/v1.0/

 

</VirtualHost>

 

만약 아래와 같이 /test URL 요청에 대해 ReverseProxy가 동작하길 원한다면 아래와 같이 수정하면 됩니다.

 

http://honeybeee.io/test/users/_search 

 

<VirtualHost *:80>

 

  ProxyPass /test http://api.honeybeee.com:8100/src/honeybeee/api/v1.0/

  ProxyPassReverse  /test http://api.honeybeee.com:8100/src/honeybeee/api/v1.0/

 

</VirtualHost>

 

4. Apache 서버를 재시작

서버 재시작 후, 다음과 같이 Client 웹브라우저에서 URL로 접근시, 마치 내부서버에 URL로 접속한 것처럼, Reverse Proxy가 동작하여 사용자에게 원하는 결과를 Response하게 됩니다.

 

ex) Client Web Browser => http://honeybeee.io/users/_search 

     Reverse Proxy => http://api.honeybeee.com:8100/src/honeybeee/api/v1.0/users/_search

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함