vendredi 6 mai 2011

Configure mod_proxy_ajp with Tomcat, an example.

mod_proxy_ajp is an Apache module which can be used to forward a client HTTP request to an internal Tomcat application server using the AJP protocol.
To respond to the question "Why should I use mod_proxy_ajp rather than a classic mod_proxy ?"
  • You can gain a lot of flexibility (lot of the apache modules/features can be used especially "name-based virtual hosting")
  • Practical for those who need to support Java applications along with PHP / Perl … (only one apache server is needed)
  • Certificates management is easier in apache configuration (this argument is a lot subjective)
  • It's not Tomcat's main objective to serve http static resources (not optimized for that)
  • Load balancing/cluster management is easier with an apache frontend

Tomcat configuration

You just have to create the AJP connector in the conf/server.xml file like that:
 port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
This line will enable AJP connections to the 8009 port of your tomcat server (localhost for example).By default you have to do nothing, the ajp connextor is already configured in default server.xml after installation.

Apache2 configuration

One way (useful if this apache is a global front end) is to create a virtual host for this application.
Listen 80
NameVirtualHost *:80
   ErrorLog /var/log/apache2/ajp.error.log
   CustomLog /var/log/apache2/ajp.log combined
   <Proxy *>
     AddDefaultCharset Off
     Order deny,allow
     Allow from all
   ProxyPass / ajp://localhost:8009/
   ProxyPassReverse / ajp://localhost:8009/
  • ProxyPass and ProxyPassReverse are classic reverse proxy directives used to forward the stream to another location.
  • ajp://... is the AJP connector location (your tomcat's server host/port)

What's the result ?

A web client will connect through HTTP to (supposing your apache2 server is running and you configured your DNS to serve this apache instance), the mod_proxy_ajp will forward you request transparently using the AJP protocol to the tomcat application server on localhost:8009.

Aucun commentaire:

Enregistrer un commentaire