Apache 및 Tomcat에서 mod_proxy_ajp 사용을 어떻게 설정합니까?

Apache 및 Tomcat에서 mod_proxy_ajp 사용을 어떻게 설정합니까?

저는 Apache가 Ruby on Rails 앱(mod_rails/Passenger를 통해)을 처리하고 Tomcat이 Java 앱을 처리하는 RHEL 5 서버에서 Apache와 Tomcat을 실행하고 싶습니다.

Apache에서 각 Rails 앱에는 URL과 가상 호스트가 있습니다. URL은 이미 DNS 서버에 구성되어 컴퓨터를 가리키도록 되어 있습니다.

ourserver.ourcompany.com/app1Tomcat에서 각 Java 앱에는 , ourserver.ourcompany.com/app2등 의 URL이 있습니다.

서버는 이미 포트 80에서 실행되고 여러 Java 앱을 제공하는 Tomcat 6으로 실행 중입니다. Apache를 추가하고 재구성하고 싶습니다. Passenger를 사용하여 RoR 앱을 호스팅하기 위해 단독 Apache 서버를 구성하는 방법을 잘 알고 있습니다. 저는 Apache와 Tomcat이 그렇게 함께 작동하도록 하는 방법을 모르겠습니다.

Google 검색을 통해 다양한 리소스와 토론을 찾았습니다(예:이 하나) 그러나 그것들은 약간 개략적이고 불완전한 경향이 있거나 내가 하려는 것과 실제로 일치하지 않는 것 같습니다. 내가 연결한 것은 특정 요청뿐만 아니라 모든 요청을 Tomcat에 보내고 Apache가 다른 요청을 처리하도록 하려는 경우에 사용되는 것 같습니다.

server.xml누군가 및 에 대한 예제 구성을 제안 httpd.conf하거나 더 자세한 리소스를 알려줄 수 있습니까?

답변1

Apache가 포트 80을 처리할 수 있도록 Tomcat을 기본 포트로 다시 설정하는 것 외에는 변경할 필요가 없습니다. server.xml대부분의 작업은 Apache 구성 파일을 통해 수행됩니다. 나는 일반적으로 이러한 항목을 외부에 두고 httpd.conf대신 <ServerRoot>/conf.d/하위 디렉터리 아래의 더 작은 구성 조각에 붙입니다.

ourserver.ourcompany.com/app1& I 에 대한 귀하의 예가 주어지면 ourserver.ourcompany.com/app2다음과 같은 구성을 가정하겠습니다.

<VirtualHost *:80>
    ServerName ourserver.ourcompany.com
    ErrorLog ...
    CustomLog ...

    [other VHost configurations]

    ProxyPass /app1 ajp://tomcat_hostname:8009/app1
    ProxyPassReverse /app1 ajp://tomcat_hostname:8009/app1

    ProxyPass /app2 ajp://tomcat_hostname:8009/app2
    ProxyPassReverse /app2 ajp://tomcat_hostname:8009/app2
</VirtualHost>

여러 개의 Tomcat 서버가 뒤에 클러스터되어 있는 경우 mod_balancer를 설정하고 다음 ajp://으로 이동하는 것이 좋습니다.mod_balancer BalancerMemberbalancer://를 밸런서 구성을 참조하는 URL 로 바꿉니다 .

답변2

나는 개인적으로 mod_proxy_ajp를 좋아하지 않습니다. Apache에서 Tomcat을 실행할 때 AJP 연결을 제공하기 위해 바로 mod_jk(Tomcat 코더의 모듈) 설치로 이동합니다. 앱 성능(스레드, 시간 초과, 노크 등)을 위해 mod_jk를 일요일까지 5가지 방법으로 조정할 수 있습니다.

  1. httpd-devel이 설치되어 있는지 확인하십시오
  2. 실제 JDK를 /usr/local/jdk1.6.0_18/과 같은 경로에 압축을 풉니다.
  3. tomcat.apache.org에서 "tomcat-connectors" 소스를 가져와서 컴파일하세요.

    CD Tomcat-커넥터-1.2.28-src/native

    ./configure --with-apxs=/usr/sbin/apxs --with-java=/usr/local/jdk1.6.0_18 --enable-prefork

    만들다

    cp 아파치-2.0/mod_jk.so /usr/local/lib/

이제 일반적인 의미에서 이를 Apache 구성에 연결한 다음 적절하게 각 가상 호스트에 연결해야 합니다. 전체 구성에서 다음과 같은 것을 추가합니다.

LoadModule jk_module /usr/local/lib/mod_jk.so
JkWorkersFile  /usr/local/tomcat/conf/workers.properties
JkShmFile      /var/log/httpd/mod_jk.shm
JkLogFile      /var/log/httpd/mod_jk.log
JkLogLevel     error

기본 Worker.properties 파일을 생성해야 합니다. 문서는 다음과 같습니다.http://tomcat.apache.org/connectors-doc/reference/workers.html매우 기본적인 것은 다음과 같습니다:

workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/local/jdk1.6.0_18
ps=/
worker.list=ajp13
worker.maintain=60
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=ajp13

이것은 server.xml의 기본 포트 8009 구성을 사용합니다. 성능을 끝없이 조정하기 위해 여기에서 조작할 수 있는 백만 개의 손잡이가 있습니다. 그런 다음 각 가상 호스트에서 원하는 앱을 "마운트"합니다.

<VirtualHost *:80>
 ServerName foo.bar.com
 ...other options ...

 JkMount /app1/* ajp13
 <Location "/app1/WEB-INF/">
    deny from all
 </Location>

 JkMount /app2/* ajp13
 <Location "/app2/WEB-INF/">
    deny from all
 </Location>

</VirtualHost>

하단에서 볼 수 있듯이 약간의 보안을 잊지 말고 WEB-INF 폴더에 대한 모든 액세스를 거부하십시오. 대부분의 웹앱은 워볼로 배포될 때 비밀번호가 web.xml인 데이터베이스 DSN을 갖습니다.

관련 정보