아파치 톰캣 서블릿/JSP 컨테이너

아파치 톰캣 7

Version 7.0.28-dev, Oct 2 2013
Apache Logo

Links

User Guide

참고

아파치 톰캣 개발

프록시 지원 기능은 어떻게 사용하는가?

Table of Contents
Introduction

톰캣의 표준 환경 설정을 사용할, 웹 애플리케이션은 처리하기 위해 요청된 서버 이름과 포트 번호를 물을 수 있습니다. 톰캣이 Coyote HTTP/1.1 Connector을 통해 독립적으로 구동될 때, 톰캣은 일반적으로 요청에 부합하는 서버이름을 전해주며, 포트 번호는 Connector가 듣고 있습니다. 서블릿 API는 아래의 목적과 같은 흥미로운 것을 불러옵니다. 아래 :

  • ServletRequest.getServerName(): 요청이 전송된 서버의 호스트 이름을 반환.
  • ServletRequest.getServerPort(): 요청이 전송된 서버의 포트 번호를 반환.
  • ServletRequest.getLocalName(): 요청된 인터넷 프로토콜(IP) 인터페이스의 호스트 이름을 반환.
  • ServletRequest.getLocalPort(): 요청된 인터넷 프로토콜(IP) 인터페이스의 포트 번호를 반환.

당신이 프록시 서버 뒤에서 구동시켰을 때(혹은 웹서버가 프록시 서버처럼 동작하도록 설정 돼 있을 때), 당신은 때때로 이러한 호출에 의해 반환 된 값을 관리하는 것을 선호할 것입니다. 특히, 당신은 일반적으로 원래 요청된 것에 명시된 포트 번호를 반영하기를 원하지, Connector자체가 받은 것을 원하지는 않을 것입니다. 당신은 proxyNameproxyPort라는 속성의 <Connector> 라는 요소를 이러한 값들로 사용할 수 있습니다.

프록시 지원은 다양한 형태가 될 수 있습니다. 아래의 섹션들은 서버의 일반적인 경우에 대한 프록시 환경 설정을 설명한 것입니다.

Apache 1.3 Proxy Support

아파치 1.3은 프록시 서버처럼 움직일 수 있는 웹서버로 설정된 선택적인 모듈(mod_proxy)을 지원합니다. 이것은 mod_jk와 같은 웹 커넥터 설정을 할 필요 없이 톰캣 인스턴스에 특정 웹 응용 프로그램에 대한 요청을 전달하는 데 사용할 수 있습니다, 이것을 달성하기 위해서, 당신은 아래의 일들을 따라야 합니다. 아래 :

  1. mod_proxy module을 포함하여 아파치 복사본을 구성합니다. 만약 당신이 소스로부터 만들었다면 이것을 가장 쉽게 하는 방법은 --enable-module=proxy./configure라는 명령어 줄에 지시하는 것입니다.
  2. 만약 아직 당신을 위해 추가되지 않았다면, If not already added for you, 아파치 구동 시간의 mod_proxy라는 모듈이 아직 로딩중인지 당신의 파일에 httpd.conf라고 지시하여 확인해 봐야 합니다. file:
    LoadModule proxy_module  {path-to-modules}/mod_proxy.so
    AddModule  mod_proxy.c
    
  3. 당신의 httpd.conf라는 파일에 당신이 원하는 대로 톰캣에 전송해 주는 웹 응용 프로그램이 2가지 지시를 하는 것을 포함합니다. 예를 들어서, 응용 프로그램에서 /myapp라는 콘텍스트 경로를 전송합니다.:
    ProxyPass         /myapp  http://localhost:8081/myapp
    ProxyPassReverse  /myapp  http://localhost:8081/myapp
    
    각각은 아파치가 http://localhost/myapp/*라는 형태의 URL들을 톰캣 커넥터 에게 보낸 것을 8081포트가 듣고 있다는 것을 말해줍니다.
  4. 당신의 톰캣복사본을 특별한 <Connector> 요소, 즉 적절한 프록시 셋팅으로 설정하십시오. 예를 들어서 :
    <Connector port="8081" ...
                  proxyName="www.mycompany.com"
                  proxyPort="80"/>
    
    이것은 서블릿 안의 이 웹 응용프로그램이 모든 프록시의 요구가 포트 80에 있는 www.mycompany.com로 지시되도록 만듭니다.
  5. <Connector>라는 요소에서 proxyName라는 속성을 생략하는 것은 합법적이다. 만약 당신이 그렇게 한다면, request.getServerName()로 돌려 받은 값은 톰캣이 실행되고 있는 호스트의 이름이 될 것입니다. 위의 예에서는 localhost입니다.
  6. 만약 당신이 또한 포트 8080(동일한 서비스요소에 중첩된 요소) 에서 듣는 <Connector>를 갖고 있다면, 각각의 포트에 대한 요구는 같은 집합의 가상 호스트와 웹 응용프로그램이 동일하게 공유합니다.
  7. 당신은 아마도 포트 8081(위의 예에서) 오직 실행중인 아파치 서버만이 수락되도록 당신의 운영체제의 IP필터링 기능이 제한해 주길 바랄것입니다.
  8. 그 대신에, 당신은 아래와 같이 오직 프록싱을 통해서만 만날 수 있는 웹 응용프로그램의 시리즈를 설정할 수 있다.
    • 또 다른 프록시 포트를 위한 하나의 <Connector>만을 포함하고 있는 <Service>를 설정할 수 있다.
    • 적절한 Engine, Host, 그리고 프록싱을 통해 가상 호스트와 웹 응용 프로그램에 접근할 수 있는 Context요소를 설정할 수 있다.
    • 원하는대로, 앞서 설명한 IP필터와 포트 8081는 보호 할 수 있다.
  9. 아파치로부터 프록시가 요구된 경우, 웹서버는 이 요청을 이것의 접근 로그에 기록합니다. 그러므로, 사람들은 일반적으로 어떤 접근 로그가 톰캣 자체로부터 동작하지 못하길 원합니다.

이 방법으로 프록시가 요청된 경우, 모든 웹 응용프로그램을 설정하기 위한 요구는 톰캣(정적인 컨텐트를 요구하는 것을 포함하여)으로 수행된다.당신은 mod_jk라는 웹 커넥터를 mod_proxy를 대신해서 사용하면 수행을 개선시킬 수 있습니다. 필터나 보안 제한에 정의된 웹 응용프로그램 개발 기술자(/WEB-INF/web.xml)가 수행하지 않는 정적인 컨텐츠를 제공하는 웹서버를 mod_jk는 설정할 수 있다.

Apache 2.0 Proxy Support
같은 지시는 1.3절 처럼 true상태로 유지됩니다.(아파치 2.0에서를 제외하고, 당신은 아마도(/WEB-INF/web.xml)를 생략할 것입니다.)

Copyright © 1999-2013, Apache Software Foundation