2012-05-07 2 views
1

ajp 프로토콜을 통해 두 개의 tomcat 응용 프로그램에 연결 중입니다. 둘 다 별도의 Tomcat 가상 호스트에서 ROOT.war로 실행됩니다. 서버에서 , 나는 구성한은/etc/hosts 파일ajp 프로토콜을 사용하여 대체 대체 호스트 별명에 연결하십시오.

127.0.0.1  localhost tcvh1 tcvh2 

아파치의 httpd.conf :

Listen 80 
NameVirtualHost *:80 

<VirtualHost *:80> 
     #ProxyPreserveHost On 
     ServerName app1.example.com 
     ProxyPass/ajp://tcvh1:8082/ 
     ProxyPassReverse/ajp://tcvh1:8082/ 

</VirtualHost> 

<VirtualHost *:80> 
     #ProxyPreserveHost On 
     ServerName app2.example.com 
     ProxyPass/ajp://tcvh2:8082/ 
     ProxyPassReverse/ajp://tcvh2:8082/ 
</VirtualHost> 

톰캣 : 내가 가지고있는

배포 된 응용 프로그램 : APP1 - $ CATALINA_HOME/tcvh1/ROOT.war APP2 - $ CATALINA_HOME/tcvh2/ROOT.war 이제

, I 포트 8080에서 실행하는 바람둥이을 변경하고 연결하는 프록시 패스를 변경 한 경우 http://tcvh1:8080, 다음은입니다. 하지만 AJP의 설정을 사용하면 은 작동하지 않습니다..

내 호스트 별칭이 AJP에서 작동하지 않는 이유는 무엇입니까? 그것을 작동하게하는 방법이 있습니까?

+0

두 개의 tomcat 인스턴스를 실행하고 있습니까? 이 경우 두 포트 모두에 포트 8082를 사용하려고 시도하는 것처럼 보이므로 작동하지 않습니다 (한 포트에서만 하나의 응용 프로그램 만 수신 대기). 하나의 Tomcat 인스턴스를 다른 포트에서 청취하고 필요에 따라 구성을 업데이트해야합니다. – larsks

+0

@larsks OP에서 두 개의 Tomcat 인스턴스가 실행되고 있지 않습니다. OP가 가상 호스팅을 사용 중입니다. http://tomcat.apache.org/tomcat-7.0-doc/virtual-hosting-howto.html –

+0

을 참조하십시오. "둘 다 별도의 Tomcat 가상 호스트에서 실행 중입니다." Apache에서 가상 호스팅) 또는 Tomcat에서 가상 호스팅을 사용하는 단일 인스턴스. 너 같은 소리 야. – larsks

답변

2

mod_proxy_ajp는 항상 httpd가 수신 한 호스트 헤더를 Tomcat에 전달하기 때문에 작동하지 않습니다. 반면 mod_proxy_http는 ProxyPreserveHost가 On으로 설정되어 있지 않으면 ProxyPass에 정의 된 호스트를 사용합니다.

httpd와 관련하여 - 가상 호스트는 app1.example.com과 app2.example.com이므로 Tomcat 인스턴스로 전달됩니다. Tomcat에는 이러한 가상 호스트에 대한 기록이 없습니다. 그것은 tcvh1과 tcvh2를 가지고 있습니다. 따라서 모든 요청은 기본 가상 호스트 (server.xml의 Engine 요소에 정의 된 서버)로 라우팅됩니다.

는이 문제를 해결하는 방법은 여러 가지가 있습니다

  1. 이름 바꾸기 당신 톰캣 가상 호스트는
  2. 톰캣 가상 호스트에 별칭을 (http://tomcat.apache.org/tomcat-7.0-doc/config/host.html#Host_Name_Aliases 참조)를 추가하여 아파치 가상 호스트와 일치 할 수 있습니다.

개인적으로 옵션 2를 사용합니다. 더 빠르고 간단합니다.

+0

예 예! 감사합니다! 나는 하루 종일 이것에 대해 조사하고있다. – NjPx