Come posso impostare l'uso di mod_proxy_ajp con Apache e Tomcat?

Vorrei eseguire Apache e Tomcat su un server RHEL 5 con Apache che gestisce applicazioni Ruby su Rails (tramite mod_rails / passeggeri) e Tomcat che gestiscono applicazioni Java.

Sotto Apache, each applicazione Rails avrà un URL e vhost. Gli URL sono già configurati nel nostro server DNS per indicare la macchina.

Sotto Tomcat, each applicazione Java dispone di un URL come questo: ourserver.ourcompany.com/app1 , ourserver.ourcompany.com/app2 , ecc.

Il server è già in esecuzione con Tomcat 6 in esecuzione sulla port 80 e serve diverse applicazioni Java. Voglio aggiungere Apache e riconfigurare. Conosco come configurare un solo server Apache per ospitare applicazioni RoR utilizzando Passenger. Non so come get Apache e Tomcat a lavorare insieme in questo modo.

Ho trovato diverse risorse e discussioni tramite Google (ad esempio, questo ) ma tendono ad essere un po 'scettiche e incomplete o non sembrano veramente corrispondere a quello che sto cercando di fare. Quello a cui ho collegato sembra essere utile se volete submit tutte le richieste a Tomcat, non solo quelle certe e che Apache gestisca altri.

Qualcuno potrebbe suggerire una configuration di esempio per server.xml e httpd.conf , o forse mi indica alcune risorse più dettagliate?

  • Port 80 reindirizza al /cgi-sys/defaultwebpage.cgi di CPanel anche dopo l'inoltro
  • mod_jk o mod_proxy
  • Urls assoluti che non funzionano con Apache2 AJP proxy Tomcat
  • tomcat (tcServer) sulla port 80 in linux ... buona idea?
  • Come fare un punto URL ad un'istanza Tomcat?
  • Come effettuare le informazioni di debug log di Tomcat 7?
  • Riavviare se il servizio tomcat7 non risponde
  • Come faccio a forzare Apache per utilizzare HTTPS in combinazione con AJP?
  • 2 Solutions collect form web for “Come posso impostare l'uso di mod_proxy_ajp con Apache e Tomcat?”

    Non è necessario modificare il server.xml tranne che mettere Tomcat nelle porte predefinite in modo che Apache possa gestire la port 80. La maggior parte dei lavori verranno eseguiti tramite i file di configuration di Apache. In genere li lascio al di fuori di httpd.conf e invece li <ServerRoot>/conf.d/ in frammenti di configuration più piccoli sotto la <ServerRoot>/conf.d/ secondaria <ServerRoot>/conf.d/ .

    Dato il tuo esempio di ourserver.ourcompany.com/app1 & ourserver.ourcompany.com/app2 Vorrei assumere una configuration di qualcosa quanto segue:

     <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> 

    Se si dispone di più server Tomcat raggruppati dietro di essa, si consiglia di impostare mod_balancer e spostare l' ajp:// su mod_balancer BalancerMember e sostituirlo con l'URL di balancer:// che si riferisce alla configuration del bilanciere.

    Non mi piace il mod_proxy_ajp personalmente; quando si esegue Tomcat sotto Apache vado a destra per installare mod_jk (il module da codici Tomcat) per fornire la connessione AJP. Puoi sintonizzare mod_jk 5 modi per domenica per la performance delle tue applicazioni (thread, timeouts, colpi, ecc.).

    1. Assicurarsi che httpd-devel sia installato
    2. Disimballare il vero JDK in un path, come /usr/local/jdk1.6.0_18/
    3. afferrare la sorgente "tomcat-connectors" da tomcat.apache.org e compilarla

      cd tomcat-connettori-1.2.28-src / native

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

      rendere

      cp apache-2.0 / mod_jk.so / usr / locale / lib /

    Ora è necessario collegarlo alla configuration di Apache in senso generale, quindi in each host virtuale come appropriato. Nella configuration generale si aggiunge qualcosa di simile:

     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 

    Dovresti creare il file worker.properties di base, ecco i documenti: http://tomcat.apache.org/connectors-doc/reference/workers.html Un aspetto fondamentale potrebbe sembrare così:

     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 

    Questo usa la port predefinita di 8009 config da server.xml – ci sono un milione di manopole che puoi trionfare qui per sintonizzarsi in modo continuo. Quindi, in each host virtuale "montare" le app che desideri:

     <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> 

    Come si vede in fondo, non dimenticare una piccola sicurezza e negare l'accesso alla tua cartella WEB-INF. La maggior parte dei webapp hanno il proprio database DSN con password web.xml quando viene distribuito come un flask da pallacanestro.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.