Links User Guide 참고 아파치 톰캣 개발 | 프록시 지원 기능은 어떻게 사용하는가?Introduction |
톰캣의 표준 환경 설정을 사용할, 웹 애플리케이션은 처리하기 위해 요청된 서버 이름과 포트 번호를 물을 수 있습니다.
톰캣이 Coyote HTTP/1.1 Connector을 통해 독립적으로 구동될 때, 톰캣은 일반적으로
요청에 부합하는 서버이름을 전해주며, 포트 번호는 Connector가 듣고 있습니다.
서블릿 API는 아래의 목적과 같은 흥미로운 것을 불러옵니다. 아래 :
ServletRequest.getServerName() : 요청이 전송된 서버의 호스트 이름을 반환.
ServletRequest.getServerPort() : 요청이 전송된 서버의 포트 번호를 반환.
ServletRequest.getLocalName() : 요청된 인터넷 프로토콜(IP) 인터페이스의 호스트 이름을 반환.
ServletRequest.getLocalPort() : 요청된 인터넷 프로토콜(IP) 인터페이스의 포트 번호를 반환.
당신이 프록시 서버 뒤에서 구동시켰을 때(혹은 웹서버가 프록시 서버처럼 동작하도록 설정 돼 있을 때),
당신은 때때로 이러한 호출에 의해 반환 된 값을 관리하는 것을 선호할 것입니다.
특히, 당신은 일반적으로 원래 요청된 것에 명시된 포트 번호를 반영하기를 원하지,
Connector자체가 받은 것을 원하지는 않을 것입니다.
당신은 proxyName 와 proxyPort 라는 속성의
<Connector> 라는 요소를 이러한 값들로 사용할 수 있습니다.
프록시 지원은 다양한 형태가 될 수 있습니다.
아래의 섹션들은 서버의 일반적인 경우에 대한 프록시 환경 설정을 설명한 것입니다.
|
Apache 1.3 Proxy Support |
아파치 1.3은 프록시 서버처럼 움직일 수 있는 웹서버로 설정된 선택적인 모듈(mod_proxy )을 지원합니다.
이것은 mod_jk 와 같은 웹 커넥터 설정을 할 필요 없이
톰캣 인스턴스에 특정 웹 응용 프로그램에 대한 요청을 전달하는 데 사용할 수 있습니다,
이것을 달성하기 위해서, 당신은 아래의 일들을 따라야 합니다. 아래 :
mod_proxy module을 포함하여 아파치 복사본을 구성합니다.
만약 당신이 소스로부터 만들었다면 이것을 가장 쉽게 하는 방법은
--enable-module=proxy 를 ./configure 라는 명령어 줄에 지시하는 것입니다.
- 만약 아직 당신을 위해 추가되지 않았다면,
If not already added for you, 아파치 구동 시간의
mod_proxy 라는 모듈이 아직 로딩중인지
당신의 파일에 httpd.conf 라고 지시하여 확인해 봐야 합니다.
file:
| | | |
LoadModule proxy_module {path-to-modules}/mod_proxy.so
AddModule mod_proxy.c
| | | | |
- 당신의
httpd.conf 라는 파일에 당신이 원하는 대로 톰캣에
전송해 주는 웹 응용 프로그램이 2가지 지시를 하는 것을 포함합니다.
예를 들어서, 응용 프로그램에서 /myapp 라는 콘텍스트 경로를 전송합니다.:
| | | |
ProxyPass /myapp http://localhost:8081/myapp
ProxyPassReverse /myapp http://localhost:8081/myapp
| | | | |
각각은 아파치가 http://localhost/myapp/* 라는 형태의 URL들을 톰캣 커넥터 에게 보낸 것을
8081포트가 듣고 있다는 것을 말해줍니다.
- 당신의 톰캣복사본을 특별한
<Connector> 요소, 즉 적절한 프록시 셋팅으로 설정하십시오.
예를 들어서 :
| | | |
<Connector port="8081" ...
proxyName="www.mycompany.com"
proxyPort="80"/>
| | | | |
이것은 서블릿 안의 이 웹 응용프로그램이 모든 프록시의 요구가 포트 80에 있는
www.mycompany.com 로 지시되도록 만듭니다.
<Connector> 라는 요소에서 proxyName 라는 속성을 생략하는 것은 합법적이다.
만약 당신이 그렇게 한다면, request.getServerName() 로 돌려 받은 값은 톰캣이 실행되고 있는
호스트의 이름이 될 것입니다. 위의 예에서는 localhost 입니다.
- 만약 당신이 또한 포트 8080(동일한 서비스요소에 중첩된 요소)
에서 듣는
<Connector> 를 갖고 있다면,
각각의 포트에 대한 요구는 같은 집합의 가상 호스트와 웹 응용프로그램이 동일하게 공유합니다.
- 당신은 아마도 포트 8081(위의 예에서) 오직 실행중인 아파치 서버만이 수락되도록
당신의 운영체제의 IP필터링 기능이 제한해 주길 바랄것입니다.
- 그 대신에, 당신은 아래와 같이 오직 프록싱을 통해서만 만날 수 있는 웹 응용프로그램의
시리즈를 설정할 수 있다.
- 또 다른 프록시 포트를 위한 하나의
<Connector> 만을 포함하고 있는
<Service> 를 설정할 수 있다.
- 적절한 Engine, Host,
그리고 프록싱을 통해 가상 호스트와 웹 응용 프로그램에 접근할 수 있는
Context요소를 설정할 수 있다.
- 원하는대로, 앞서 설명한 IP필터와 포트 8081는 보호 할 수 있다.
- 아파치로부터 프록시가 요구된 경우, 웹서버는 이 요청을 이것의 접근 로그에 기록합니다.
그러므로, 사람들은 일반적으로 어떤 접근 로그가 톰캣 자체로부터 동작하지 못하길 원합니다.
이 방법으로 프록시가 요청된 경우, 모든 웹 응용프로그램을 설정하기 위한 요구는
톰캣(정적인 컨텐트를 요구하는 것을 포함하여)으로 수행된다.당신은 mod_jk 라는 웹 커넥터를
mod_proxy 를 대신해서 사용하면 수행을 개선시킬 수 있습니다.
필터나 보안 제한에 정의된 웹 응용프로그램 개발 기술자(/WEB-INF/web.xml )가 수행하지 않는
정적인 컨텐츠를 제공하는 웹서버를 mod_jk 는 설정할 수 있다.
|
|