====== Apache Proxy Module ======
* [[http://docs.codehaus.org/display/JETTY/Configuring+mod_proxy|mod_proxy로 Jetty연결]]
* [[http://httpd.apache.org/docs/current/mod/mod_proxy.html|mod_proxy]]
====== mod proxy & Tomcat ======
* [[http://tomcat.apache.org/connectors-doc-archive/jk2/proxy.html|mod_proxy http,ajp로 Tomcat 연결]]
* [[http://tomcat.apache.org/tomcat-6.0-doc/proxy-howto.html|mod_proxy http,ajp로 Tomcat 연결 2]]
*
# AJP PROXY 연결
ProxyPass ajp://localhost:8009/examples/
# Apache의 경로와 Tomcat의 경로(혹은 context root path)가 다를 경우에는 reverse가 필요하다.
# HTTP PROXY 연결
ProxyPass http://localhost:8080/examples/
ProxyPassReverse http://localhost:8080/examples/
* 혹은 Location 지정 없이
ProxyPass /myapp http://localhost:8080/myapp
ProxyPassReverse /myapp http://localhost:8080/myapp
* cookie path 문제 해결 : 만약 Tomcat 애플리케이션의 Context root path와 Apache로 연결된 Path가 다를 경우(ProxyPass / http://localhost:8081/myapp 같은 경우) cookie 의 path 때문에 문제가 발생한다. http://bobforma.blogspot.com/2009/06/having-trouble-with-http-sessions-in.html 참조.
*
ProxyPassReverseCookiePath /internal-app /my-app
# 혹은 / 와 /myapp 형태의 매핑인 경우 server.xml 의 부분에 다음 추가하여 Session Cookie 문제를 해결 할 수 있다.
emptySessionPath="true"
* mod_proxy_http를 사용하면 request.serverName, request.serverPort 값이 비정상적(localhost:8080)으로 나온다. [http://tomcat.apache.org/tomcat-6.0-doc/proxy-howto.html|Tomcat server.xml Connector 설정]]이 필요하다.
* -> 이 문제는 정확히는 Apache가 ''Host'' 헤더를 넘겨주지 않아서이다.
* ''ProxyPreserveHost on'' 설정을 추가하면 ''Host'' 헤더를 현재 사용자가 요청한 서버 host로 지정을 해주기 때문에 아래 설정이 필요없어진다.
* Connector 에 proxyName과 proxyPort 를 지정할 경우, **ProxyPassReverse** 설정값에 주의해야 한다. 아래와 같이 **proxyName 에 지정된 도메인명과 컨텍스트 패스**를 reverse 프록시에 지정해야 한다.
ProxyPassReverse /myapp/ http://www.example.com/myapp/
# ProxyPassReverse /myapp/ http://www.example.com:8080/myapp/ : 처음엔 이게 맞다고 봤으나 아닌 듯.
* 예외설정
ProxyPass /images ! # /images 는 프록시를 안타게 설정한다.
====== ProxyPass 파라미터 ======
* ''retry=초'' : 서버가 다운됐을 때 지정되 초가 지나야 해당 서버로 요청을 재시도 한다. 개발환경에서는 1초로 운영환경에서는 적당한 시간을 지정한다. 기본 1분?
====== Proxy HTTP 사용시 발생할 수 있는 문제점 ======
* 헤더를 전달하지 않는다.
* [[http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypreservehost|ProxyPreserveHost]]로 HOST 헤더 넘기도록 할 수 있음.
* remote address 와 remote hostname을 전달하지 않는다.
* "X-forwarded-for" 헤더에 실제 remote address를 담아서 전달한다.(Apache 버전에 따라 다름)
* 이 헤더에는 IP 값이 여러개 들어갈 수도 있다. L7 -> Apache HTTPD -> Tomcat 이런식으로 올경우 실사용자IP와 L7 IP가 함께 들어가게 된다.
* Tomcat은 [[http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/valves/RemoteIpValve.html|RemoteIpValue]]를 통해 Remote IP를 보정해 줄 수 있다.
* [[http://httpd.apache.org/docs/2.3/mod/mod_remoteip.html|mod_remoteip]]를 사용할 수도 있다.