티스토리 뷰
[업데이트 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
- Memorize
- ate
- Sea Bottom
- aws #cloudfront
- #TensorFlow
- English
- #ApacheSpark
- #ApacheZeppelin
- GOD
- Worry
- SSM
- 2D Game
- project
- OST
- #REST API
- Library
- 도커
- ILoop Engine
- docker
- Jekyll and Hyde
- #ELK Stack
- Badge
- some time ago
- sentence test
- Mask R-CNN
- belief
- Meow
- Physical Simulation
- Ragdoll
- Game Engine
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |