티스토리 뷰
프로그래밍
Proxy 를 사용한 Apache + IIS 동일 포트 사용 및 멀티도메인 처리 (Forward Proxy, Reverse Proxy)
ReturnToHome 2019. 8. 23. 20:13- 아래는 Apache + IIS 를 혼용하여 사용하는 경우의 특정 케이스에 대한 처리 내용이며 Proxy 에 대한 내용을 담고 있으며 여타 사이트들의 정보들을 나름의 방식으로 이해하기 위해 재정리 한 부분입니다.
- 제목에 명시된 내용에 대한 해결 방법은 Reverse Proxy 를 사용한 방법입니다.
- Proxy
○ 서버와 클라이언트 사이에 존재하며 사용자가 어떤 요청을 하였을 때 해당 Proxy 를 통하여
응답을 내려받게 된다. Proxy 를 통한 데이터들은 캐싱이 되므로 저장된 데이터일 경우 요청된 원격지 서버까지 갈 필요가 없으므로 응답 시간이 절약되며 불필요한 통신을 하지 않기 때문에 그로인해 외부와의 트래픽 감소, 네트워크 병목현상을 방지하는 효과를 얻을 수 있다.
- Reverse Proxy
○ 사용자가 example.domain.co.kr 을 호출하게 되면 Reverse Proxy 가 이 요청을 받아 설정된 Proxy 주소로 요청, 처리 후 사용자쪽으로 전달하는 구조를 말한다.
이러한 처리 구조를 갖게 된 가장 큰 이유는 보안 때문이다.
example.domain.co.kr 서비스를 Reverse Proxy 없이 WAS 를 최앞단에 놓고 서비스 할 경우
WAS 가 뚫리게 되면 보통 DB 서버가 함께 연결되어 있는 Java 서비스 환경 구조상 한순간 모든 정보가 노출될 수 있다.
그렇기 떄문에 보안을 위해 실제 서비스는 내부망에 위치 시킨 후, Proxy 에 의해 허용된 Port 를 통해 해당 서비스와 통신하여 처리하는 Reverse Proxy 방식이 사용된다.
리눅스 환경에서는 SELinux 의 정책으로 인해 웹 서버를 허용된 톰캣 포트에만 접근 (8080, 8009) 시킬 수 있으므로 웹 서버가 해킹 당해도 톰캣 서버까지는 연결이 불가능하다.
Reverse Proxy 환경에서는 WAS 에서 Remote Addr 을 조회하여도 Reverse Proxy IP 를 얻게 되므로 Client IP 를 얻기 위해서는 X-Forward-For (XFF) Http Header 를 참고해야 한다.
Reverse Proxy 역시 캐싱이 가능하며, 로드밸런싱도 수행가능하다. 또한 Server 의 역할을 하기 때문에 Server Side Proxy 기법이라고도 한다.
- Forward Proxy
○ 사용자가 example.domain.co.kr 을 호출하게 되면 Forward Proxy 가 이 요청을 받아
example.domain.co.kr 에 연결하여 그 결과를 사용자에게 전달한다.
보통 Forward Proxy 의 경우에는 캐싱 기능이 있으므로 요청 데이터가 캐싱되어있을 경우
example.domain.co.kr 로 재요청하지 않고 저장된 데이터를 바로 응답을 해줄 수 있기에
빠른 처리 시간과 함께 불필요한 네트워크 요청이 줄어 들게 되는 이점이 있다.
(Proxy 의 역할 그 자체인듯…?)
- 처리 케이스
○ 현재 서버 및 애플리케이션 구성
§ IIS 에 80 포트로 3개의 도메인에 대한 서비스가 존재 (ASP 언어)
§ a.domain.co.kr
§ b.domain.co.kr
§ c.domain.co.kr
○ 신규 애플리케이션 및 구성 환경
§ a.domain.co.kr 에 대한 애플리케이션이 기존 IIS 에서 Apache 로 변경 (+JAVA 언어)
§ a.domain.co.kr 에 대한 context 가 별도 존재하며 context 별 war 가 별도로 존재
§ / -> front
§ /api -> api 관련
§ /admin -> admin 관련
○ 특이사항
§ b.domain.co.kr, c.domain.co.kr 은 IIS 의 80 포트
§ a.domain.co.kr 은 Apache 의 80 포트
§ a.domain.co.kr 의 3개 context 는 모두 80 포트로 처리 되어야 함
§ a.domain.co.kr 은 Tomcat 사용 8080 으로 서비스되었다고 가정
- 처리 방법
○ 아래 내용은 동일 IP & 도메인 기반의 처리 방법
○ IIS 포트 변경
§ b.domain.co.kr -> 9091
§ c.domain.co.kr -> 9092
○ Apache 설치
§ 설치형 or Binary 형태로 Apache Web Server 설치
§ 아래는 Apache 2.2 버전 기준으로 설명
§ /conf/httpd.conf 수정
§ 경로 변경
® ServerRoot "Apache설치경로/Apache2"
® DocumentRoot "Apache설치경로/Apache2/htdocs"
® Directory "Apache설치경로/Apache2/htdocs" -- root directory
® Script Alias /cgi-bin/ "Apache설치경로/Apache2/cgi-bin"
® Directory "Apache설치경로/Apache2/cgi-bin" -- cgi directory
§ Proxy 관련 모듈 사용설정
® 아래 명시된 모듈들의 주석을 해제하여 사용토록 한다.
◊ mod_proxy.so
◊ mod_proxy_http.so
◊ mod_proxy_ajp.so
◊ mod_proxy_balancer.so
§ VirtualHost Conf 파일 Include (주석해제)
® # Virtual hosts
Include conf/extra/httpd-vhosts.conf
§ /extra/httpd-vhosts.conf 수정
#Apache 2.4 이후부터는 명시하지 않아도 되지만 그 이하 버전에서는 꼭 명시
NameVirtualHost *:80
#b.domain.co.kr 요청에 대한 처리
<VirtualHost *:80>
ProxyPreserveHost On
ServerName domainB
ServerAlias b.domain.co.kr
ProxyPass / http://b.domain.co.kr:9091/
ProxyPassReverse / http://b.domain.co.kr:9091/
</VirtualHost>
#c.domain.co.kr 요청에 대한 처리
<VirtualHost *:80>
ProxyPreserveHost On
ServerName domainC
ServerAlias c.domain.co.kr
ProxyPass / http://c.domain.co.kr:9092/
ProxyPassReverse / http://c.domain.co.kr:9092/
</VirtualHost>
#a.domain.co.kr 요청에 대한 처리
<VirtualHost *:80>
ProxyPreserveHost On
ServerName domainA
ServerAlias a.domain.co.kr
#127.0.0.1 은 domain host 가 설정되어 있다면 b, c 도메인처럼 domain 으로 명시 가능
#ProxyPass /api http://a.domain.co.kr:8080/api
#ProxyPassReverse /api http://a.domain.co.kr:8080/api
ProxyPass /api http://127.0.0.1:8080/api
ProxyPassReverse /api http://127.0.0.1:8080/api
ProxyPass /admin http://127.0.0.1:8080/admin
ProxyPassReverse /admin http://127.0.0.1:8080/admin
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>
○ ProxyPass 와 ProxyPassReverse 의 차이
§ 도메인: http://entrance.domain.co.kr
§ httpd-vhosts.conf 설정
§ ProxyPass /api http://api.domain.co.kr/
§ ProxyPassReverse /api http://api.domain.co.kr/
§ 위와 같이 설정되어있다고 가정하였을 때
§ http://entrance.domain.co.kr/api/list/1 과 같이 호출을 한다면 내부적으로 Proxypass 에 의해
http://api.domain.co.kr/list/1
로 변환되어 요청이 처리 될 것이다.
이 때, 내부적인 처리로직에 의한 리다이렉트 등의 이유로
http://api.domain.co.kr/list/1/something/happen
처럼 리턴이 될 경우, ProxyPassReverse 설정에 의해서
http://entrance.domain.co.kr/api/list/1/something/happen
으로 매칭이 되어 처리 된 후, Client 쪽 전달헤더에도 해당 주소가 전달 될 것이다.
하지만, ProxyPassReverse 설정이 없다면 http://api.domain.co.kr/list/1/something/happen
와 같이 리다이렉트 되는 순간 브라우저는 위의 URL 을 바라보게 되고
이는 http://api.domain.co.kr 의 노출과 함께 정상적인 처리를 할 수 없게 (api.domain.co.kr 에 대한 바인딩이 없다면) 되는 상황이 발생 할 수 있다.
그러므로 Reverse Proxy 를 사요할 경우 ProxyPass, ProxyPassReverse 를
함께 사용하는 것을 권장한다고 한다.
'프로그래밍' 카테고리의 다른 글
[IntelliJ] error: cannot find symbol (4) | 2020.02.15 |
---|---|
[MySQL or MariaDB] 인덱스 관련 정리 (0) | 2019.11.20 |
[ORACLE] n개 ROW 데이터들을 각각의 컬럼으로 합치려는 경우.. (0) | 2019.08.08 |
Spring MVC + Swagger2 (7) | 2019.06.23 |
[ASP] SendXMLHttp 사용과 Timeout (0) | 2018.12.24 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 볼리비아
- 나미비아
- Cambodia
- 후마리
- jQuery
- 남미
- 애드센스
- 킹덤 호텔
- 빅토리아폴스
- 빈트후크
- 남미 저가항공
- 우유니
- calama
- aguas calientes
- 성스러운 계곡
- 성계 투어
- 마추피추
- 칼라마
- Namibia
- 햄버거
- 쿠스코
- Cusco
- 족발
- 푸에르토 나탈레스
- 칠레
- Oracle
- Uyuni
- 캄보디아
- 아구아스 칼리엔테스
- 토레스 델 파이네
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함