You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by "McHugh, Jason" <jm...@amazon.com> on 2006/07/24 06:22:03 UTC

Tomcat as a proxy server

I want to run straight tomcat as a proxy server.  (I understand that there are a variety of other applications out there that may perform better and offer more features.  I also understand that I could front tomcat with apache and do some sort of rewriting solution.  I'd rather not do any of these; I just want to use plain tomcat.  :) )

I've written a servlet and overridden the commonly used default servlet 'org.apache.catalina.servlets.DefaultServlet' with my own.  All of this is working fine.

The problem occurs when I run my server as a proxy server.  Web browsers will make the request for "http://www.google.com" look something like this:

GET http://www.google.com/ HTTP/1.1
Accept: */*
Accept-Language: en-us
Host: www.google.com

(there are other parts to it, but really this is all that matters.)  My tomcat responds with

HTTP/1 1 400 No Host matches server name www.google.com
Server: Apache-Coyote/1.1
Transfer-Encoding: chunked
Date: Sat, 22 Jul 2006 20:10:26 GMT
Connection: close

Because, of course, my server host name is not www.google.com.

I've read the documentation and a good deal of the source code and now understand that org.apache.catalina.core.StandardEngine has associated with it a set of Hosts each which is configured with one or more host names (usually one but org.apache.catalina.core.StandardHost supports 'host name aliases').  If the Engine cannot find a host matching the "Host" http header then it will respond back with the result above.  (I guess it is a bit more complicated than this since my traces through the code show other classes, like host-manager, getting in the mix.)

I expected that Tomcat could accomplish what I am trying to do purely with configuration but after reading through the documentation, FAQs, and much of the catalina code, I can't find the solution.  (The one solution that I have come up with, involving subclassing the org.apache.catalina.core.StandardHost class and overriding the 'findChild' method, feels hacky and like I said -- I thought that I should be able to do what I want using config only.)

To summarize - I would like to configure my tomcat instance to call my servlet independent of the URL or http "host" header which tomcat receives.  Does anyone know how to do this?

Thanks.

Jason McHugh

---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Re: Tomcat as a proxy server

Posted by Pid <p...@pidster.com>.

McHugh, Jason wrote:
> I want to run straight tomcat as a proxy server.  (I understand that there are a variety of other applications out there that may perform better and offer more features.  I also understand that I could front tomcat with apache and do some sort of rewriting solution.  I'd rather not do any of these; I just want to use plain tomcat.  :) )
> 
> I've written a servlet and overridden the commonly used default servlet 'org.apache.catalina.servlets.DefaultServlet' with my own.  All of this is working fine.
> 
> The problem occurs when I run my server as a proxy server.  Web browsers will make the request for "http://www.google.com" look something like this:
> 
> GET http://www.google.com/ HTTP/1.1
> Accept: */*
> Accept-Language: en-us
> Host: www.google.com
> 
> (there are other parts to it, but really this is all that matters.)  My tomcat responds with
> 
> HTTP/1 1 400 No Host matches server name www.google.com
> Server: Apache-Coyote/1.1
> Transfer-Encoding: chunked
> Date: Sat, 22 Jul 2006 20:10:26 GMT
> Connection: close
> 
> Because, of course, my server host name is not www.google.com.
> 
> I've read the documentation and a good deal of the source code and now understand that org.apache.catalina.core.StandardEngine has associated with it a set of Hosts each which is configured with one or more host names (usually one but org.apache.catalina.core.StandardHost supports 'host name aliases').  If the Engine cannot find a host matching the "Host" http header then it will respond back with the result above.  (I guess it is a bit more complicated than this since my traces through the code show other classes, like host-manager, getting in the mix.)
> 
> I expected that Tomcat could accomplish what I am trying to do purely with configuration but after reading through the documentation, FAQs, and much of the catalina code, I can't find the solution.  (The one solution that I have come up with, involving subclassing the org.apache.catalina.core.StandardHost class and overriding the 'findChild' method, feels hacky and like I said -- I thought that I should be able to do what I want using config only.)
> 
> To summarize - I would like to configure my tomcat instance to call my servlet independent of the URL or http "host" header which tomcat receives.  Does anyone know how to do this?

Do you have a default host configured?

<Engine defaultHost="proxyProcessorHost"...
http://tomcat.apache.org/tomcat-5.5-doc/config/engine.html


Pid


> Thanks.
> 
> Jason McHugh
> 
> ---------------------------------------------------------------------
> To start a new topic, e-mail: users@tomcat.apache.org
> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
> 
> 
> 

---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org