André,

What kind of "late afternoon" ??  

I thought for folks in Western-Europe the day starts at late afternoon :-)  The 
good folks of France just get out from the bed at that time, just like the 
"nyarleans" here in the States :-)

Thanks a lot for the excellent explanation of the process below.  I truly 
appreciate your effort.

I checked on my cookies and found that the one associated with the 
bml0065.yalepath.org machine  and with the path of /examples was changing its 
content all the time.  So then I looked the bottom of your email and I saw this 
long named creatures from NewZeeLand christened ProxyPassReverseCoockieDomain.  
Punched it into Google and there came my solution right on the first page:
http://www.experts-exchange.com/Software/Server_Software/Web_Servers/Q_22444213.html

Old Hungarian proverb: "Even the blind hen is finding the corn" :-)

After some scrolling, I found Nick Kew article at
http://www.apachetutor.org/admin/reverseproxies
/Thanks Nick !!!!/

Right now my very basic reverse proxy config looks like this:

ProxyRequests Off
<Proxy balancer://pathCluster>
        BalancerMember http://bml0065.yalepath.org loadfactor=10 route=tomcat3
        BalancerMember http://bml0066.yalepath.org loadfactor=10 route=tomcat1
        ProxySet lbmethod=bytraffic
</Proxy>
ProxyPass       /tc/ balancer://pathCluster/ stickysession=JSESSIONID|jsessionid
ProxyPassReverse        /tc/ balancer://pathCluster/
ProxyPassReverseCookiePAth      / /
ProxyPassReverseCookieDomain    / /

and now everything works again like charm  :-)  Tomcats can fail over and 
Httpds can fail over and the session is still good and valid.  There is a space 
between the two "/" character above.

Now off to self signing some certificates, configure the ssl.conf file and I am 
almost done :-)

Thanks again,

János

On Mar 23, 2011, at 1:01 PM, André Warnier wrote:

> The setup with the first HTTP proxy and then the JK proxy is a bit confusing, 
> and on this late afternoon I am not in my best guessing mode, but what I was 
> thinking about was something like this :
> (Oh, and I have to add that I am not quite clear at the moment as to when 
> Tomcat uses a cookie to return the session-id, or appends it to the URL; but 
> anyway..)
> 
> 1) the browser sends a request, with ultimate goal Tomcat
> 2) the request is picked up by the front-end Apache, which proxies it to the 
> back-end Apache via HTTP, after removing the /tc/ bit of the URL.
> 3) the back-end Apache (maybe the same one as (2)) now examines the URL, and 
> decides that it has to be proxied to Tomcat via JK. So it does that.
> 4) the back-back-end Tomcat receives the request, creates a new session, etc, 
> and returns a response which includes a JSESSIONID cookie.  Presumably, in 
> the JSESSIONID cookie, there is a "cookie domain", which says for which 
> domain this cookie is valid.
> 5) the response goes back through the chain and arrives at the browser. The 
> browser stores the cookie, associated to the cookie domain indicated in the 
> cookie.
> 6) the browser now sends a second request.  To retrieve the same session, it 
> should send that JSESSIONID cookie back with the second request.  But is does 
> not, because the cookie domain does not match the server to which it is 
> talking now (the front-end Apache).
> 7) so the request leaves the browser without the cookie, arrives at the 
> front-end Apache, is proxied again twice, and arrives at Tomcat without the 
> JSESSIONID cookie.
> So Tomcat thinks this request does not have a session yet, and creates a new 
> one.
> 
> In other words, somewhere in your chain of proxies, something happens to the 
> cookie (or does not happen), which causes the cookie domain to mismatch the 
> server to which the browser is talking.
> 
> The rest is left as an exercise to the reader.
> 
> Maybe you are just missing a ProxyPassReverseCookieDomain directive somewhere.
> 
> (but this is all just a late-afternoon guess, remember ?)
> 
> 
> 
> János Löbb wrote:
>> Hi André,
>> Her is the content of one of the workers.properties file.  On the other 
>> machine the names are changed accordingly:
>> bml0065:local administrator$ cat apache2/conf/workers.properties worker.list 
>> = lb,jkstatus
>> worker.lb.type=lb
>> worker.lb.balance_workers=tomcat1,tomcat3
>> #,tomcat2,tomcat4
>> worker.lb.sticky_session = True
>> worker.lb.sticky_session_force = False
>> worker.jkstatus.type=status
>> worker.tomcat1.type = ajp13
>> worker.tomcat1.host = bml0066.yalepath.org
>> worker.tomcat1.port = 8109
>> worker.tomcat1.lbfactor = 1
>> worker.tomcat1.redirect=tomcat3
>> #worker.tomcat2.type = ajp13
>> #worker.tomcat2.host = bml0066.yalepath.org
>> #worker.tomcat2.port = 8209
>> #worker.tomcat2.lbfactor = 1
>> #worker.tomcat2.redirect=tomcat4
>> worker.tomcat3.type = ajp13
>> worker.tomcat3.host = bml0065.yalepath.org
>> worker.tomcat3.port = 8309
>> worker.tomcat3.lbfactor = 1
>> worker.tomcat3.redirect=tomcat1
>> #worker.tomcat4.type = ajp13
>> #worker.tomcat4.host = bml0065.yalepath.org
>> #worker.tomcat4.port = 8409
>> #worker.tomcat4.lbfactor = 1
>> #worker.tomcat4.redirect=tomcat2
>> Originally planned 2 tomcats per machine but now I try to simplify as much 
>> as I can.
>> My next step is to set logging to debug and try to split the atoms to see 
>> where do I have the disaster.  Let me know if you see something wrong or 
>> suspicious.  There was an occasion when for the worker on the actual machine 
>> I used localhost for host and that also worked when I just load balanced 
>> tomcats by selecting one or the other proxy balance members directly without 
>> using the reverse proxy.  Then for the sake of clearness I specified the 
>> FQDN for hostnames.
>> Thanks ahead,
>> János
>> On Mar 23, 2011, at 11:42 AM, André Warnier wrote:
>>> Just a vague suspicion..
>>> 
>>> What are the hostnames which you use in your workers.properties, for the 
>>> Tomcats ?
>>> 
>>> 
>>> 
>>> János Löbb wrote:
>>>> Hi Igor,
>>>> I use mod-proxy to balance the apaches/httpds.  I use mod-jk t balance the 
>>>> tomcats.  For the tomcats f course I also have the workers.properties 
>>>> files in the apache2/conf directory.  When invoke the URL to the 
>>>> individual balance members, everything works fine.  It is when I try to 
>>>> use the reverse proxy then every attempt to any of the tomcats creates a 
>>>> new session, so fail over does not  work.
>>>> Thanks,
>>>> János
>>>> On Mar 22, 2011, at 6:59 PM, Igor Cicimov wrote:
>>>>> Interesting I had no idea you can mix mod_proxy and mod_jk, thought you
>>>>> should use the one or the other. What I do I have workers.properties file 
>>>>> in
>>>>> the Apache conf directory with load-balancer worker that takes care of the
>>>>> load balancing ans sticky sessions.
>>>>> 
>>>>> On Wed, Mar 23, 2011 at 8:54 AM, János Löbb <janos.l...@yale.edu> wrote:
>>>>> 
>>>>>> Hi,
>>>>>> 
>>>>>> I have two machines  bml0065.yalepath.org and bml0066.yalepath.org.  Both
>>>>>> have OSX 10.6.6, apache 2.2.17 and mod_jk 1.2.31 installed.  Tomcat is
>>>>>> 7.0.10 on both.
>>>>>> 
>>>>>> Apache was compiled on both machines with proxy, proxy-balancer, 
>>>>>> proxy-http
>>>>>> and proxy-ajp enabled.
>>>>>> 
>>>>>> The bml0065 machine is configured as a reverse proxy.
>>>>>> 
>>>>>> The theory is, that users hit the bml0065 machine like
>>>>>> 
>>>>>> http://bml0065.yalepath.org/tc/examples/servlets/servlet/SessionExample
>>>>>> 
>>>>>> and using mod-proxy and mod-proxy-http it will select either bml0065 or
>>>>>> bml0066 depending on the lbmethod configured.  Then let say it selects
>>>>>> bml0065.  Then it comes to this machine as:
>>>>>> 
>>>>>> http://bml0065.yalepath.org/examples/servlets/servlet/SessionExample
>>>>>> 
>>>>>> From here, because there is a JkMount for examples in its httpd.conf, it
>>>>>> connects via mod_jk to the Tomcat instance on this machine, in this case
>>>>>> tomcat3.
>>>>>> 
>>>>>> The problem is that as soon the reverse proxy is involved new sessions 
>>>>>> are
>>>>>> created all the time, so session failover  do not work.  If I take the
>>>>>> reverse proxy out from the picture, everything works.
>>>>>> 
>>>>>> Here is the reverse proxy config from httpd.conf of the bml0065 machine
>>>>>> 
>>>>>> JkLogLevel info
>>>>>> JkMount /examples/* lb
>>>>>> JkMount /examples/servlets/servlet/* lb
>>>>>> JkMount /jkmanager/* jkstatus
>>>>>> JkWorkersFile "/usr/local/apache2/conf/workers.properties"
>>>>>> JkLogFile "/usr/local/apache2/logs/mod_jk.log
>>>>>> 
>>>>>> ProxyRequests Off
>>>>>> <Proxy balancer://pathCluster>
>>>>>>     BalancerMember http://bml0065.yalepath.org loadfactor=10
>>>>>> route=tomcat3
>>>>>>     BalancerMember http://bml0066.yalepath.org loadfactor=10
>>>>>> route=tomcat1
>>>>>>     ProxySet lbmethod=bytraffic
>>>>>> </Proxy>
>>>>>> ProxyPass       /tc/ balancer://pathCluster/
>>>>>> stickysession=JSESSIONID|jsessionid
>>>>>> ProxyPassReverse        /tc/ balancer://pathCluster/
>>>>>> 
>>>>>> 
>>>>>> <Location /balancer-manager>
>>>>>>     SetHandler balancer-manager
>>>>>>     Order Deny,Allow
>>>>>>     Allow from .yalepath.org
>>>>>> </Location>
>>>>>> 
>>>>>> A very similar setup worked in 2009 with Tomcat 6.0.18 and httpd 2.2.11.
>>>>>> 
>>>>>> Here are the snippets from both machine catalina.out file
>>>>>> 
>>>>>> <snip bml0065>
>>>>>> Mar 22, 2011 5:06:11 PM org.apache.catalina.core.ApplicationContext log
>>>>>> INFO: SessionListener:
>>>>>> sessionCreated('0409F29D221545DB0BB5F62205B24471.tomcat3')
>>>>>> Mar 22, 2011 5:06:11 PM org.apache.catalina.core.ApplicationContext log
>>>>>> INFO: SessionListener:
>>>>>> attributeAdded('0409F29D221545DB0BB5F62205B24471.tomcat3', 's1', 't3')
>>>>>> Mar 22, 2011 5:07:06 PM org.apache.catalina.core.ApplicationContext log
>>>>>> INFO: SessionListener:
>>>>>> sessionCreated('DE7A014A0F1659F0B777E0DF4A2355D4.tomcat3')
>>>>>> Mar 22, 2011 5:07:06 PM org.apache.catalina.core.ApplicationContext log
>>>>>> INFO: SessionListener:
>>>>>> attributeAdded('DE7A014A0F1659F0B777E0DF4A2355D4.tomcat3', 's2', 't3')
>>>>>> </snip>
>>>>>> 
>>>>>> <snip bml0066>
>>>>>> Mar 22, 2011 5:06:11 PM org.apache.catalina.core.ApplicationContext log
>>>>>> INFO: SessionListener:
>>>>>> sessionCreated('0409F29D221545DB0BB5F62205B24471.tomcat3')
>>>>>> Mar 22, 2011 5:06:11 PM org.apache.catalina.core.ApplicationContext log
>>>>>> INFO: SessionListener:
>>>>>> attributeAdded('0409F29D221545DB0BB5F62205B24471.tomcat3', 's1', 't3')
>>>>>> Mar 22, 2011 5:07:06 PM org.apache.catalina.core.ApplicationContext log
>>>>>> INFO: SessionListener:
>>>>>> sessionCreated('DE7A014A0F1659F0B777E0DF4A2355D4.tomcat3')
>>>>>> Mar 22, 2011 5:07:06 PM org.apache.catalina.core.ApplicationContext log
>>>>>> INFO: SessionListener:
>>>>>> attributeAdded('DE7A014A0F1659F0B777E0DF4A2355D4.tomcat3', 's2', 't3')
>>>>>> </snip>
>>>>>> 
>>>>>> 
>>>>>> Here is the last access session from the access_log:
>>>>>> <snip bml0065>
>>>>>> 10.84.2.65 - - [22/Mar/2011:17:06:11 -0400] "POST
>>>>>> /examples/servlets/servlet/SessionExample HTTP/1.1" 200 1114
>>>>>> 10.84.2.41 - - [22/Mar/2011:17:06:11 -0400] "POST
>>>>>> /tc/examples/servlets/servlet/SessionExample HTTP/1.1" 200 1114
>>>>>> 10.84.2.65 - - [22/Mar/2011:17:06:11 -0400] "GET
>>>>>> /examples/servlets/images/code.gif HTTP/1.1" 304 -
>>>>>> 10.84.2.41 - - [22/Mar/2011:17:06:11 -0400] "GET
>>>>>> /tc/examples/servlets/images/code.gif HTTP/1.1" 304 -
>>>>>> 10.84.2.65 - - [22/Mar/2011:17:06:11 -0400] "GET
>>>>>> /examples/servlets/images/return.gif HTTP/1.1" 304 -
>>>>>> 10.84.2.41 - - [22/Mar/2011:17:06:11 -0400] "GET
>>>>>> /tc/examples/servlets/images/return.gif HTTP/1.1" 304 -
>>>>>> ::1 - - [22/Mar/2011:17:06:18 -0400] "OPTIONS * HTTP/1.0" 200 -
>>>>>> ::1 - - [22/Mar/2011:17:06:19 -0400] "OPTIONS * HTTP/1.0" 200 -
>>>>>> 10.84.2.65 - - [22/Mar/2011:17:07:06 -0400] "POST
>>>>>> /examples/servlets/servlet/SessionExample HTTP/1.1" 200 1114
>>>>>> 10.84.2.41 - - [22/Mar/2011:17:07:06 -0400] "POST
>>>>>> /tc/examples/servlets/servlet/SessionExample HTTP/1.1" 200 1114
>>>>>> </snip>
>>>>>> 
>>>>>> The 10.84.2.41 is my machine.  In the log above looks like the hit to the
>>>>>> reverse proxy - with the /tc/ start - inserted later than the converted 
>>>>>> url
>>>>>> for the given balance member.
>>>>>> 
>>>>>> There is nothing interesting in the apache error_log.
>>>>>> 
>>>>>> What am I doing wrong ?
>>>>>> 
>>>>>> This is a test cluster.  The application developer wants to test his 
>>>>>> app's
>>>>>> failover by pulling the ethernet plug out from the non reverse proxy when
>>>>>> the session is on that machine.
>>>>>> 
>>>>>> Thanks ahead,
>>>>>> 
>>>>>> János
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>>>>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>>>>> 
>>>>>> 
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>> For additional commands, e-mail: users-h...@tomcat.apache.org
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>> For additional commands, e-mail: users-h...@tomcat.apache.org
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org


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

Reply via email to