On 13/06/2016 15:32, Xavier Dury wrote:
> Sorry, resent as plain text:
> 
>> On 13/06/2016 14:23, Xavier Dury wrote:
>>> Hi,
>>>  
>>> The recommended approach when using a proxy in front of tomcat is to have 
>>> the same context path
>>> on both sides like this:
>>>  
>>>  http://mycompany.com/myapp --> http://myinternalserver.lan:8080/myapp
>>>  
>>> Having different context paths like this:
>>>  
>>>  http://mycompany.com/mypublicapp --> 
>>> http://myinternalserver.lan:8080/myprivateapp
>>>  
>>> would need to rewrite urls in the generated html with something like 
>>> mod_proxy_html:
>>>  
>>> /myprivateapp/* would need to be rewritten as /mypublicapp/*.
>>>  
>>> Instead of using mod_proxy_html, is it possible to have a valve that would 
>>> take
>>> care of this by letting the proxy send the correct contextPath in a 
>>> request header (RequestHeader set X-Forward-ContextPath "mypublicapp") 
>>> which would alter the
>>> behaviour of request.getContextPath(), response.sendRedirect(), etc.?
>>>  
>>> So, if you are using ${pageContext.request.contextPath} in your 
>>> application, it would give the
>>> correct context path for the external world and there would be no need to 
>>> rewrite urls.
>>>  
>>> Or is it a bad idea?
>>>  
>>> Proxies can already send the remote server, ip address, port to tomcat... 
>>> so why not the context path?
>>  
>> Mu gut reaction is that such a valve would be much more complex to
>> implement that it would be to simply rename the WAR on the Tomcat side
>> so the paths matched.
> 
> What about the following scenario (using only one tomcat instance for two 
> virtual hosts):
> 
> http://www.mysite.com/ --> http://myinternalserver.lan:8080/www/
> http://admin.mysite.com/ --> http://myinternalserver.lan:8080/admin/

Tomcat supports virtual hosts as well. Just configure two virtual hosts
with separate a docBase and a ROOT app each. You'll need to make sure
the proxy passes on the host header.

>> The Tomcat internals assume that the context path associated with the
>> request is consistent with the context path associated with the web
>> application processing the request. I don't know if anything would break
>> if that assumption was not valid.
> 
> So a valve would not be able to override that behavior?

Anything is possible.

How simple would the code be? I don't know.
How fragile would such a solution be? I don't know.
What would the performance impacts of such a solution be? I don't know.

How long would it take to implement and test? Several orders of
magnitude more than setting up a couple of virtual hosts in Tomcat and
configuring them appropriately.

Mark


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to