Apache2.0=>Mongrel Proxying issue

Apache2.0=>Mongrel Proxying issue

am 28.09.2007 19:56:58 von BCHodo

I'm running Ubuntu 6.06LTS, Apache 2.0.55, and WebMin 1.36. I've been
trying to set up static content with server-side includes to be
delivered by Apache, but reverse proxying for Rails application
reqeusts on a local (soon to be remote) Mongrel server at port 8000. I
also wanted to have any request that is received without a specific
file to be redirected to index.shtml.

I've been able to get everything running EXCEPT the reverse proxy with
the following config:

ServerName myapp.com
ServerAlias www.myapp.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/rails/myapp/public
ErrorLog /var/www/myapp/log/apache2.log

RewriteMap railservers rnd:/var/www/rails/map.txt

Options FollowSymLinks +Includes +ExecCGI
AllowOverride None
Order allow,deny
Allow from all
RewriteEngine On
RewriteRule ^$ index.shtml [QSA]
RewriteRule "^/(images|stylesheets|javascripts|pictures|graphics)/?
(.*)" "$0" [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ http://localhost:8000/$1 [P,L]

RewriteLog "/var/www/myapp/log/rewrite.log"
RewriteLogLevel 0
#placed in global parameter file

# Avoid open server to proxying
ProxyRequests Off
# Pass other requests to mongrel instance
#ProxyPass / http://localhost:8000/
# Enable reverse proxying
ProxyPassReverse / http://localhost:8000/
# Let apache pass the original host not the ProxyPass one
ProxyPreserveHost On

AddType text/html .shtml
AddOutputFilter INCLUDES .shtml

LogLevel debug

CustomLog /var/log/apache2/access.log "combined"
ServerSignature On

I have a RewriteMap defined to allow me to set up a cluster of
Mongrels once I get one working, since 2.0 doesn't have the balancer
module.

Webmin puts the proxy config in a separate file called proxy.conf
which contains:



#turning ProxyRequests on and allowing proxying from all may
allow
#spammers to use your proxy to send email.

ProxyRequests Off


Order deny,allow
#Deny from all
Allow from all


# Enable/disable the handling of HTTP/1.1 "Via:" headers.
# ("Full" adds the server version; "Block" removes all outgoing Via:
headers)
# Set to one of: Off | On | Full | Block

ProxyVia Off

# To enable the cache as well, edit and uncomment the following
lines:
# (no cacheing without CacheRoot)

CacheRoot "/var/cache/apache2/proxy"
CacheSize 5
CacheGcInterval 4
CacheMaxExpire 24
CacheLastModifiedFactor 0.1
CacheDefaultExpire 1
# Again, you probably should change this.
#NoCache a_domain.com another_domain.edu joes.garage_sale.com



I've tried several things:
-put the rewriteengine on directive outside of the directory block: I
was unable to access any page that wasn't specifically requested.

-defined "ProxyPass / http://localhost:8000/": was unable to access
anything (no permission to access) even though permissions are set to
775

-turned on rewritelog. here are the results for a www.myapp.com/state/list
request:
(3) add path info postfix: /var/www/rails/myapp/public/state -> /var/
www/rails/myapp/public/state/list
(3) strip per-dir prefix: /var/www/rails/myapp/public/state/list ->
state/list
(3) applying pattern '^$' to uri 'state/list'
(3) add path info postfix: /var/www/rails/myapp/public/state -> /var/
www/rails/myapp/public/state/list
(3) strip per-dir prefix: /var/www/rails/myapp/public/state/list ->
state/list
(3) applying pattern '^/(images|stylesheets|javascripts|pictures|
graphics)/?(.*)' to uri 'state/list'
(3) add path info postfix: /var/www/rails/myapp/public/state -> /var/
www/rails/myapp/public/state/list
(3) strip per-dir prefix: /var/www/rails/myapp/public/state/list ->
state/list
(3) applying pattern '^/(.*)$' to uri 'state/list'
(1) pass through /var/www/rails/myapp/public/state

It seems that the rewrite is working up to the rewritecond statement.
It parses the statement pattern correctly, but the file state/list
does not exist, so the condition "!-f" should pass the request to
Mongrel, but it seems to pass it to Apache, who doesn't find the file
"state/list" and gives a 404 error, unless I'm reading the logs wrong!
I wish I had detailed instructions on how to read a rewritelog and
what the codes mean. I haven't been able to find them anywhere.

The proxy modules are loaded, so there must be something else I'm not
doing. I've been working on this for 2 weeks. Any suggestions will be
appreciated!

Re: Apache2.0=>Mongrel Proxying issue

am 01.10.2007 16:38:35 von BCHodo

After much trial and tribulation I discovered the one small thing that
prevented this from working.

In the rewritecond, the regex to extract the Ruby string (i.e. "/state/
list") MUST include the leading slash. In other words, "^(.*)$ not "^/
(.*)$.


On Sep 28, 12:56 pm, "BCH...@gmail.com" wrote:
> I'm running Ubuntu 6.06LTS, Apache 2.0.55, and WebMin 1.36. I've been
> trying to set up static content with server-side includes to be
> delivered by Apache, but reverse proxying for Rails application
> reqeusts on a local (soon to be remote) Mongrel server at port 8000. I
> also wanted to have any request that is received without a specific
> file to be redirected to index.shtml.
>
> I've been able to get everything running EXCEPT the reverse proxy with
> the following config:
>
> ServerName myapp.com
> ServerAliaswww.myapp.com
> ServerAdmin webmaster@localhost
> DocumentRoot /var/www/rails/myapp/public
> ErrorLog /var/www/myapp/log/apache2.log
>
> RewriteMap railservers rnd:/var/www/rails/map.txt
>
> Options FollowSymLinks +Includes +ExecCGI
> AllowOverride None
> Order allow,deny
> Allow from all
> RewriteEngine On
> RewriteRule ^$ index.shtml [QSA]
> RewriteRule "^/(images|stylesheets|javascripts|pictures|graphics)/?
> (.*)" "$0" [L]
> RewriteCond %{REQUEST_FILENAME} !-f
> RewriteRule ^/(.*)$http://localhost:8000/$1[P,L]
>

> RewriteLog "/var/www/myapp/log/rewrite.log"
> RewriteLogLevel 0
> #placed in global parameter file
>
> # Avoid open server to proxying
> ProxyRequests Off
> # Pass other requests to mongrel instance
> #ProxyPass /http://localhost:8000/
> # Enable reverse proxying
> ProxyPassReverse /http://localhost:8000/
> # Let apache pass the original host not the ProxyPass one
> ProxyPreserveHost On
>
> AddType text/html .shtml
> AddOutputFilter INCLUDES .shtml
>
> LogLevel debug
>
> CustomLog /var/log/apache2/access.log "combined"
> ServerSignature On
>
> I have a RewriteMap defined to allow me to set up a cluster of
> Mongrels once I get one working, since 2.0 doesn't have the balancer
> module.
>
> Webmin puts the proxy config in a separate file called proxy.conf
> which contains:
>
>
>
> #turning ProxyRequests on and allowing proxying from all may
> allow
> #spammers to use your proxy to send email.
>
> ProxyRequests Off
>
>
> Order deny,allow
> #Deny from all
> Allow from all
>

>
> # Enable/disable the handling of HTTP/1.1 "Via:" headers.
> # ("Full" adds the server version; "Block" removes all outgoing Via:
> headers)
> # Set to one of: Off | On | Full | Block
>
> ProxyVia Off
>
> # To enable the cache as well, edit and uncomment the following
> lines:
> # (no cacheing without CacheRoot)
>
> CacheRoot "/var/cache/apache2/proxy"
> CacheSize 5
> CacheGcInterval 4
> CacheMaxExpire 24
> CacheLastModifiedFactor 0.1
> CacheDefaultExpire 1
> # Again, you probably should change this.
> #NoCache a_domain.com another_domain.edu joes.garage_sale.com
>
>

>
> I've tried several things:
> -put the rewriteengine on directive outside of the directory block: I
> was unable to access any page that wasn't specifically requested.
>
> -defined "ProxyPass /http://localhost:8000/": was unable to access
> anything (no permission to access) even though permissions are set to
> 775
>
> -turned on rewritelog. here are the results for awww.myapp.com/state/list
> request:
> (3) add path info postfix: /var/www/rails/myapp/public/state -> /var/
> www/rails/myapp/public/state/list
> (3) strip per-dir prefix: /var/www/rails/myapp/public/state/list ->
> state/list
> (3) applying pattern '^$' to uri 'state/list'
> (3) add path info postfix: /var/www/rails/myapp/public/state -> /var/
> www/rails/myapp/public/state/list
> (3) strip per-dir prefix: /var/www/rails/myapp/public/state/list ->
> state/list
> (3) applying pattern '^/(images|stylesheets|javascripts|pictures|
> graphics)/?(.*)' to uri 'state/list'
> (3) add path info postfix: /var/www/rails/myapp/public/state -> /var/
> www/rails/myapp/public/state/list
> (3) strip per-dir prefix: /var/www/rails/myapp/public/state/list ->
> state/list
> (3) applying pattern '^/(.*)$' to uri 'state/list'
> (1) pass through /var/www/rails/myapp/public/state
>
> It seems that the rewrite is working up to the rewritecond statement.
> It parses the statement pattern correctly, but the file state/list
> does not exist, so the condition "!-f" should pass the request to
> Mongrel, but it seems to pass it to Apache, who doesn't find the file
> "state/list" and gives a 404 error, unless I'm reading the logs wrong!
> I wish I had detailed instructions on how to read a rewritelog and
> what the codes mean. I haven't been able to find them anywhere.
>
> The proxy modules are loaded, so there must be something else I'm not
> doing. I've been working on this for 2 weeks. Any suggestions will be
> appreciated!