본문 바로가기

WEB - Apache 계열/각종 설정

[Apache,OHS] proxy 옵션 가이드 (forward,reverse,websocket)

<참고 블로그 글>

http://www.lesstif.com/system-admin/forward-proxy-reverse-proxy-21430345.html

https://dany-it.tistory.com/107

https://httpd.apache.org/docs/2.4/ko/urlmapping.html

https://arclab.tistory.com/103

https://fruitdev.tistory.com/106

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=writer0713&logNo=221049806513

https://httpd.apache.org/docs/2.4/mod/mod_proxy_connect.html

https://velog.io/@always0ne/Proxy-Pass%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-Apache-Web-Server%EC%97%90-WAS-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0

 

#. WebSocket 관련

https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html

https://xestinf.tistory.com/75

https://j1mmyson.github.io/posts/upgrade/

 


 

<추가로 load 필요한 모듈>

 

(필수로 필요한 모듈)

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_connect_module modules/mod_proxy_connect.so

 

(http 프로토콜로 프록시 전달할 경우)

LoadModule proxy_http_module modules/mod_proxy_http.so

 

(ajp 프로토콜로 프록시 전달할 경우)

LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

 

(ws 프로토콜로 프록시 전달할 경우)

LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

 


 

<Forward Proxy / Reverse Proxy>

ProxyRequests 옵션을 어떻게 설정하는지에 따라

Forward Proxy 로 동작할지 Reverse Proxy 로 동작할지 결정된다.

 

ProxyRequests On -> Forward Proxy

ProxyRequests Off -> Reverse Proxy

 


 

<Forward Proxy 설정 예시>

httpd.conf 파일에 아래 옵션을 추가한다.

ProxyRequests On
ProxyVia On
<Proxy "*">
  Require all granted
</Proxy>

AllowCONNECT 8080

 

AllowCONNECT 옵션에 작성하는 포트 번호는

프록시 서버를 거쳐서 최종적으로 호출하게 될 api 주소의 포트 번호를 의미한다.

 

ex) 프록시 서버를 거쳐 최종적으로 호출하게 될 api의 주소가 아래와 같다면

https://api.keuangkuo.com:8080/getAddress

AllowCONNECT 옵션에 8080 포트를 추가한다.

 


 

#. 테스트

export http_proxy=http://{프록시서버IP}:{프록시서버 HTTP PORT}

export https_proxy=http://{프록시서버IP}:{프록시서버 HTTP PORT}

export no_proxy="127.0.0.1, localhost" (해당 옵션은 필수 아님)

curl -i -X PUT -d curl https://api.keuangkuo.com:8080/getAddress

curl https://api.keuangkuo.com:8080/getAddress

 


 

<Reverse Proxy 설정 예시 - http 프로토콜>

OHS 서버의 httpd.conf 에 아래의 옵션 추가

ProxyPass {프록시 서버에서의 호출 URL} {Application 처리할 서버에서의 호출 URL}
ProxyPassReverse {프록시 서버에서의 호출 URL} {Application 처리할 서버에서의 호출 URL}

 

상황 예시)

Proxy 서버 IP : 192.168.56.3

Remote 서버 IP : 192.168.56.2

OHS Listen Port : 양측 모두 80

---------------------------------------

Proxy 서버의 httpd.conf 에 옵션 추가

ProxyPass  /send/send.do http://192.168.56.2/send/send.do

ProxyPassReverse /send/send.do http://192.168.56.2/send/send.do

---------------------------------------

http://192.168.56.3/send/send.do 를 호출하면 (Proxy 서버의 IP Address)

http://192.168.56.2/send/send.do 가 최종적으로 화면에 출력된다

 

좌측 이미지는 Proxy 서버를 거쳐서 호출한 방식, 우측 이미지는 was 서버가 있는 시스템에서 직접적으로 호출한 방식

 

send.do로 호출하고 최종적으로 send.jsp 가 호출되도록 테스트 해 보았음.

호출 URL이 반드시 .do 확장자여야 하는 것은 아님.

Proxy Server 쪽에 send.do 라는 파일은 존재하지 않으며

최종적으로 Remote 서버의 정보를 호출하기 위한 수단으로만 사용된다.

 


 

<Reverse Proxy 설정 예시 - webSocket>

암호화 되지 않은 프로토콜인 ws 와 (http과 비슷)

암호화 프로토콜인 wss 가 있다 (https과 비슷)

 

httpd.conf 파일에 아래 옵션을 추가한다.

WAS 서버에는 비암호화 프로토콜인 ws 프로토콜로 전달한다.

ProxyPass /websocket ws://127.0.0.1:8000/websocket
ProxyPassReverse /websocket ws://127.0.0.1:8000/websocket

 

브라우저에서 URL로 WEB서버 호출 시 ws/wss 프로토콜을 직접 사용할 수는 없다.

html 파일에서 ws/wss 프로토콜로 WEB서버를 호출하고, WEB서버가 WAS서버 측으로 프록시를 전달하는 구조.

ws = new WebSocket('wss://127.0.0.1/test/websocket/test');