You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@httpd.apache.org by "Neil A. Hillard" <hi...@whl.co.uk> on 2004/12/22 16:49:04 UTC

[users@httpd] Rewriting problems with Apache 2.0.51

Hi,

	I hope someone here can help me as I'm starting to pull my hair 
out with this problem !!!

	I've got Apache 2.0.51 running as an accelerator and am having 
problems with the rewriting.  I followed Nick Kew's article at:

http://www.apacheweek.com/features/reverseproxies

to get the basic set up but am having problems with specific redirects 
causing Apache to match the wrong rule.

Apache is being used purely as an accelerator to frontend a host of 
different applications running on other servers and no content is being 
served from the accelerator.

The following is what I think is the relevant part of the config, please 
let me know if you'd like to see any other bits of it (names change to 
protect the innocent :-):

 RewriteEngine on
 RequestHeader   unset  Accept-Encoding
 ProxyPass       /app1                http://server1.domain.com/app1
 ProxyPass       /path1               http://server2.domain.com/path1
 ProxyPass       /path2               http://server2.domain.com/path2
 RewriteRule  ^/\$(.*)$               http://server2.domain.com/\$$1 [P]

 Redirect        /app2                     http://accel.domain.com/app2/
 ProxyPass       /app2/                    http://server3.domain.com/
 ProxyHTMLURLMap http://server3.domain.com /app2
 <Location /app2/>
  ProxyPassReverse /                       <====== OFFENDING LINE
  SetOutputFilter proxy-html
  ProxyHTMLURLMap /                        /app2/
  ProxyHTMLURLMap /app2                    /app2
 </Location>

 Redirect        /app3                     http://accel.domain.com/app3/
 ProxyPass       /app3/                    http://server4.domain.com/
 ProxyHTMLURLMap http://server4.domain.com /app3
 <Location /app3/>
  ProxyPassReverse /
  SetOutputFilter proxy-html
  ProxyHTMLURLMap /                        /app3/
  ProxyHTMLURLMap /app3                    /app3
 </Location>


So, /app1 gets forwarded on to server1.domain.com/app1, /path1 and /path2 
get forwarded to server2.domain.com/path1 and server2.domain.com/path2, 
/app2 gets forwarded to server3.domain.com/ and /app3 gets forwarded to 
server4.domain.com/.

This all seems to work, including the HTML rewriting unless an application 
sends back a partial redirect.  Unfortunately these are commercial 
applications which cannot be changed (I know that partial redirects are 
against the RFCs !!!)

For example, a user goes to http://accel.domain.com/app3/.  This gets 
proxied to http://server4.domain.com/.  As the user has not logged in, a 
redirect is sent to '/login.html'.  When this reaches the client for some 
reason it seems to have been rewritten by the 'ProxyPassReverse /' under 
'/app2/' and not '/app3/' as would be expected.  The client receives a 
redirect to:

http://accel.domain.com/app2/login.html
                        ^^^^

Needless to say this URL doesn't work !!!  I've commented out that line 
and it will then match the next ''ProxyPassReverse /' it finds (I 
currently have a dozen or so backend servers !)

I have seen this occuring on a packet capture when monitoring both client 
-> accelerator and accelerator -> backend server traffic.

Can anybody shed some light on this ?

Many, many thanks in advance,


				Neil.

-- 
Neil Hillard                    hillardn@whl.co.uk
Westland Helicopters Ltd.       http://www.whl.co.uk/

Disclaimer: This message does not necessarily reflect the
            views of Westland Helicopters Ltd.



---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
   "   from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org


Re: [users@httpd] Rewriting problems with Apache 2.0.51

Posted by "Neil A. Hillard" <hi...@whl.co.uk>.
Hi,

	I haven't managed to get anywhere with this particular problem.  
Does anyone have any ideas or should I try the modules & developer mailing 
lists ?  Or is there somewhere better to try?

	Many thanks in advance,


				Neil.

On Wed, 22 Dec 2004, Neil A. Hillard wrote:

> Hi,
> 
> 	I hope someone here can help me as I'm starting to pull my hair 
> out with this problem !!!
> 
> 	I've got Apache 2.0.51 running as an accelerator and am having 
> problems with the rewriting.  I followed Nick Kew's article at:
> 
> http://www.apacheweek.com/features/reverseproxies
> 
> to get the basic set up but am having problems with specific redirects 
> causing Apache to match the wrong rule.
> 
> Apache is being used purely as an accelerator to frontend a host of 
> different applications running on other servers and no content is being 
> served from the accelerator.
> 
> The following is what I think is the relevant part of the config, please 
> let me know if you'd like to see any other bits of it (names change to 
> protect the innocent :-):
> 
>  RewriteEngine on
>  RequestHeader   unset  Accept-Encoding
>  ProxyPass       /app1                http://server1.domain.com/app1
>  ProxyPass       /path1               http://server2.domain.com/path1
>  ProxyPass       /path2               http://server2.domain.com/path2
>  RewriteRule  ^/\$(.*)$               http://server2.domain.com/\$$1 [P]
> 
>  Redirect        /app2                     http://accel.domain.com/app2/
>  ProxyPass       /app2/                    http://server3.domain.com/
>  ProxyHTMLURLMap http://server3.domain.com /app2
>  <Location /app2/>
>   ProxyPassReverse /                       <====== OFFENDING LINE
>   SetOutputFilter proxy-html
>   ProxyHTMLURLMap /                        /app2/
>   ProxyHTMLURLMap /app2                    /app2
>  </Location>
> 
>  Redirect        /app3                     http://accel.domain.com/app3/
>  ProxyPass       /app3/                    http://server4.domain.com/
>  ProxyHTMLURLMap http://server4.domain.com /app3
>  <Location /app3/>
>   ProxyPassReverse /
>   SetOutputFilter proxy-html
>   ProxyHTMLURLMap /                        /app3/
>   ProxyHTMLURLMap /app3                    /app3
>  </Location>
> 
> 
> So, /app1 gets forwarded on to server1.domain.com/app1, /path1 and /path2 
> get forwarded to server2.domain.com/path1 and server2.domain.com/path2, 
> /app2 gets forwarded to server3.domain.com/ and /app3 gets forwarded to 
> server4.domain.com/.
> 
> This all seems to work, including the HTML rewriting unless an application 
> sends back a partial redirect.  Unfortunately these are commercial 
> applications which cannot be changed (I know that partial redirects are 
> against the RFCs !!!)
> 
> For example, a user goes to http://accel.domain.com/app3/.  This gets 
> proxied to http://server4.domain.com/.  As the user has not logged in, a 
> redirect is sent to '/login.html'.  When this reaches the client for some 
> reason it seems to have been rewritten by the 'ProxyPassReverse /' under 
> '/app2/' and not '/app3/' as would be expected.  The client receives a 
> redirect to:
> 
> http://accel.domain.com/app2/login.html
>                         ^^^^
> 
> Needless to say this URL doesn't work !!!  I've commented out that line 
> and it will then match the next ''ProxyPassReverse /' it finds (I 
> currently have a dozen or so backend servers !)
> 
> I have seen this occuring on a packet capture when monitoring both client 
> -> accelerator and accelerator -> backend server traffic.
> 
> Can anybody shed some light on this ?
> 
> Many, many thanks in advance,
> 
> 
> 				Neil.
> 
> 

-- 
Neil Hillard                    hillardn@whl.co.uk
Westland Helicopters Ltd.       http://www.whl.co.uk/

Disclaimer: This message does not necessarily reflect the
            views of Westland Helicopters Ltd.


---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
   "   from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org