Successful Settings for Apache forwarding to Mongrel
Posted by hardwarehank, Thu Jun 15 14:14:37 UTC 2006
So, after a day of working on it, I finally fixed the problems I was having.
I wanted to have Apache forward all traffic hitting a path to a mongrel server running in a rails application. So, I did as bish0p suggested, and set up the rails app to accept this behavior. First, I put this at the bottom of my environment.rb:
ActionController::AbstractRequest.relative_url_root = "/MyRailsApp"
This make it so all the urls in the Rails app are prepended with /MyRailsApp. Without this, you’ll get renders that don’t have stylsheets, javascripts, or anything else that resides in the public directory of rails.
Second, I made a ProxyPass entry in the Apache configuration:
Redirect /MyRailsApp http://www.example.com/MyRailsApp/
ProxyPass /MyRailsApp/ http://localhost:6402/MyRailsApp/
ProxyPassReverse /MyRailsApp/ http://localhost:6402/MyRailsApp/
This allows all traffic that goes to /MyRailsApp on the server to be redirected to my mongrel server, which is running on port 6402 (This port does not have to be unfirewalled since all the requests are done locally by Apache).
Next, I have to further fix the problem of mongrel not being able to find things in public by making a symlink in public to itself. Make sure not to just do a link to ../public. Here’s an example:
cd public
mkdir MyRailsApp # This has to be whatever you used in your Apache configuration.
cd MyRailsApp
ln -s ../* . # Link to everything above.
rm MyRailsApp # Get rid of the recursive link.
Now, just configure your db, application, etc. and start the mongrel server from the root of the application.
mongrel_rails start -p 6402 -e production -d
And voila! You have a working ProxyPass connection from Apache to Mongrel.
Update:
Thanks to this article, I now have mod_deflate running! It was very easy to install:
apxs -c -i mod_deflate.c # As Root
This will install it to your apache installation’s modules directory. Now, just add some lines in your config:
Redirect /MyRailsApp http://www.example.com/MyRailsApp/
ProxyPass /MyRailsApp/ http://localhost:6402/MyRailsApp/
<Location /MyRailsApp>
ProxyPassReverse /MyRailsApp
SetOutputFilter INFLATE;proxy-html;DEFLATE
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript
</Location>
Congratulations, you’re now deflating your HTML/XML/CSS/JS/PlainText files! This works on all modern browsers (yes, even Lynx), and greatly reduces the size of the files sent. Here’s a summary:
Before:
14.4K: 172.65 seconds
28.8K: 86.32 seconds
33.6K: 73.99 seconds
56K: 44.40 seconds
ISDN 128K: 13.60 seconds
T1 1.44Mbps: 1.18 seconds
After:
14.4K: 52.27 seconds
28.8K: 26.13 seconds
33.6K: 22.40 seconds
56K: 13.44 seconds
ISDN 128K: 4.12 seconds
T1 1.44Mbps: 0.36 seconds
Roughly 3 times as fast!!
Also, it may be possible to leave off a lot of the junk here. I might have to streamline the configuration some in the following days. If I’m right, you won’t even need the ActionController line anymore.

Blog Posts
June 29, 2006 @ 09:48 AM
June 29, 2006 @ 03:08 PM
July 20, 2006 @ 04:18 AM
August 09, 2006 @ 09:40 PM