Problems with VirtualHosts + mod_rewrite + mod_proxy :(

Using a single web hosting account to host multiple sites

Problems with VirtualHosts + mod_rewrite + mod_proxy :(

Postby rave8151 » Tue Jul 15, 2008 2:08 pm

Hi all, I have a problem that I can't seem to find info on anywhere!

CURRENT SETUP:
I'm running Apache 1.3 on Server_1 which directs all requests with JkMount to Server_2 which runs a home grown CMS application ('cmsapp') and a related application ('app1') on tomcat 5. The CMS application services 20+ domains, and the Apache server uses VirtualHosts for each of them. e.g:

Code: Select all
<VirtualHost 1.2.3.4:80>
   ServerAdmin webmaster@domain1.com
   DocumentRoot /usr/local/www/data/vhosts
   ServerName domain1.com
   ServerAlias www.domain1.com
   
   ErrorLog /usr/var/log/vhosts/www.domain1.com-error_log
   CustomLog /usr/var/log/vhosts/www.domain1.com-access_log combined
   
        JkMount /cmsapp/* worker1
   JkMount /app1/* worker1

   <Directory "/usr/local/www/data/vhosts">
      RewriteEngine On
      RewriteBase /   
      RewriteRule ^$ /cmsapp/homepage.html [L]
      RewriteRule ^([a-zA-Z0-9_-]{1,30})$ /cmsapp/$1.do.html [R]
   </Directory>
</VirtualHost>


The RewriteRules (as I understand them) allow us to direct to a different default starting page for each domain name, as specified in the VirtualHost settings. This all works fine and there have been no real problems with this setup for over 2 years.

PROBLEM:

An increase in the number of domains being managed by the CMS and the rise in traffic means our little tomcat server can't handle it fast enough! I really want to upgrade to Apache 2.2 and get rid of the JkMount setup and implement a reverse proxy so I can set up a cache for the Tomcat applications. This, I think, will alleviate the problems.

But try as I might I can't get the setup to work! Maybe my VirtualHost settings are wrong for Apache2.2, maybe I don't know enough about Regex, but I think the problem is my lack of experience with mod_rewrite and mod_proxy.

Below are the best settings I have found so far for the domain shown above. This resolves requests for specific pages and displays them properly, but the rewrite rules (which work for Apache 1.3) don't get executed. So instead of rewriting the request for 'http://www.domain1.com' to the default homepage for that domain, it just goes to the Tomcat default homepage, "$CATALINA_HOME/webapps/ROOT/index.jsp":

Code: Select all
<VirtualHost 1.2.3.4:80>
   ServerAdmin webmaster@domain1.com
   DocumentRoot /usr/local/www/data/vhosts
   ServerName domain1.com
   ServerAlias www.domain1.com

        ErrorLog /usr/var/log/vhosts/www.domain1.com-error_log
   CustomLog /usr/var/log/vhosts/www.domain1.com-access_log combined

        ProxyRequests Off

        ProxyPass / http://1.2.3.111:8180/          #Tomcat Server
        ProxyPassReverse / http://1.2.3.111:8180/   

        <Directory "/usr/local/www/data/vhosts">
                RewriteEngine On
                RewriteBase /
                RewriteRule ^$ /cmsapp/homepage.html [L]
      RewriteRule ^([a-zA-Z0-9_-]{1,30})$ /cmsapp/$1.do.html[R]
        </Directory>
</VirtualHost>


I think the issue might be something to do with the module order, but I can't figure out a solution. I read somewhere that one can leave out the 'ProxyPass' directive and just use 'RewriteRule' to send requests through a compiled-in mod_proxy. I tried setting that up but then I couldn't access any pages at all, with every request returning an HTTP 403 error message.

Does anyone know how I can get the old RewriteRule directives to work and fix this problem? Or how I can write something simpler with the [P] flag for my proxy?

Thanks in advance!!
rave8151
 
Posts: 2
Joined: Tue Jul 15, 2008 2:03 pm

Postby richardk » Tue Jul 15, 2008 3:28 pm

Try
Code: Select all
<VirtualHost 1.2.3.4:80>
   ServerName domain1.com
   ServerAlias www.domain1.com
   ServerAdmin webmaster@domain1.com

   ErrorLog  /usr/var/log/vhosts/www.domain1.com-error_log
   CustomLog /usr/var/log/vhosts/www.domain1.com-access_log combined

   RewriteEngine On

   RewriteRule ^/$ /cmsapp/homepage.html [PT,L]
   RewriteRule ^/([a-z0-9_-]{1,30})$ /cmsapp/$1.do.html [NC,R=301,L]

   ProxyRequests Off

   ProxyPass        / http://1.2.3.111:8180/ #Tomcat Server
   ProxyPassReverse / http://1.2.3.111:8180/
</VirtualHost>
richardk
 
Posts: 8800
Joined: Wed Dec 21, 2005 7:50 am

Postby rave8151 » Wed Jul 16, 2008 8:13 am

Thank you so much! This has worked perfectly!
rave8151
 
Posts: 2
Joined: Tue Jul 15, 2008 2:03 pm


Return to Domain Handling

Who is online

Users browsing this forum: No registered users and 26 guests

cron