Hi Chris too, and hi nohacks.

I was not quite convinced by Chris's explanation, so I tested this by myself.
Apache httpd 2.2.3
mod_jk 1.2.18  (quite old)
Tomcat 5.5.27

In my case, URI's starting with /starweb are being redirected to Tomcat by mod_jk (corresponding to the OP's case "/myapp").
I also set the JkLogLevel to "debug" for this test.

Then I accessed a URI that is re-directed to Tomcat, but fetches a static html page there (that same page does not exist under Apache httpd's DocumentRoot):
http://myhost/starweb/starlog4_example_static.html

That worked fine of course, delivered by Tomcat.
Then I added a dummy jsessionid to the URI, as follows :
http://myhost/starweb/starlog4_example_static.html;jsessionid=blabla
and tried again.
That also returned the page from Tomcat, no problem.

In the mod_jk logfile, I find this (edited, because there is at lot more at the debug level) :

[Mon May 04 19:03:28 2009] [7189:47328] [debug] map_uri_to_worker::jk_uri_worker_map.c (502): Removing Session path ';jsessionid=blabla' URI '/starweb/starlog4_example_static.html' [Mon May 04 19:03:28 2009] [7189:47328] [debug] map_uri_to_worker::jk_uri_worker_map.c (508): Attempting to map URI '/starweb/starlog4_example_static.html;jsessionid=blabla' from 13 maps [Mon May 04 19:03:28 2009] [7189:47328] [debug] map_uri_to_worker::jk_uri_worker_map.c (520): Attempting to map context URI '/servlets-examples/*' [Mon May 04 19:03:28 2009] [7189:47328] [debug] map_uri_to_worker::jk_uri_worker_map.c (520): Attempting to map context URI '/starweb/*' [Mon May 04 19:03:28 2009] [7189:47328] [debug] map_uri_to_worker::jk_uri_worker_map.c (534): Found a wildchar match ajp13 -> /starweb/* [Mon May 04 19:03:28 2009] [7189:47328] [debug] jk_handler::mod_jk.c (1832): Into handler jakarta-servlet worker=ajp13 r->proxyreq=0 [Mon May 04 19:03:28 2009] [7189:47328] [debug] wc_get_worker_for_name::jk_worker.c (111): found a worker ajp13 [Mon May 04 19:03:28 2009] [7189:47328] [debug] wc_maintain::jk_worker.c (301): Maintaining worker ajp13 [Mon May 04 19:03:28 2009] [7189:47328] [debug] init_ws_service::mod_jk.c (531): Service protocol=HTTP/1.1 method=GET host=(null) addrr=192.168.245.129 name=myhost.company.com port=80 auth=(null) user=(null) laddr=192.168.245.20 raddr=192.168.245.129
[Mon May 04 19:03:28 2009] [7189:47328] [debug]

etc... (the rest shows the page being returned by Tomcat)

So, the above works, and at least for URI's supposed to be forwarded to Tomcat, nor Apache httpd nor mod_jk are confused by the ";jessionid=" appendix to the URI. It's also interesting to note that mod_jk, when it is called by Apache to examine this URI and see if it wants to handle it, is smart enough to first remove the "jsessionid=xxx" portion, before comparing the URI to its list of things to forward.

Then I tried to access a document which is not redirected to Tomcat, but located under Apache httpd's DocumentRoot :
http://myhost/starlog4.html

That worked also fine, and was delivered by Apache httpd.
Then I added a "jsessionid" attribute to this request :

http://myhost/starlog4.html;jsessionid=blabla

and then Apache httpd indeed returned a "404 Not found" error.
So, despite my initial scepticism (for which I apologise), Chris turns out to be right.

The Apache error log shows :
[Mon May 04 19:21:16 2009] [error] [client 192.168.245.129] File does not exist: /var/www/develop/starlog4.html;jsessionid=blabla

So indeed, the error is caused by (carefully, one item at a time) :

- the browser accesses the Tomcat application
- the Tomcat application returns a page (login.jsf), *in which* there is a link to
/a4j_3_2_2-SNAPSHOTorg/richfaces/renderkit/html/css/basic_classes.xcss/DATB/eAF7sqpgb-jyGdIAFrMEaw__.jsf;jsessionid=7B8278D155437DE625509198918C08D4.tomcat2
- the browser thus issues a request to Apache to obtain this file
- somehow Apache + mod_jk do not thing that this URI should be forwarded to Apache, so Apache tries to serve it itself - and it does not find this object under its DocumentRoot and thus returns a 404.

I don't think that mod_jk, even with the "JkStripSession" parameter on, will scan each page returned by Tomcat, and /in the content/ change these links to remove the ";jsessionid=..." part.

So the questions would be :
1) /why/ does the page returned by Tomcat contain the embedded <img> tags with a "....;jsessionid=...." URI ?
What puts that jession-id there ?
OR
2) what makes it so that when Tomcat returns that page, Apache+mod_jk think that this css URI does /not/ have to be forwarded to Tomcat ?

There must be, at the Apache level, a rogue JkUnMount or SetEnvIf no_jk rule that interferes there, in the sense of not being quite smart enough to know that this link /should/ be forwarded to Tomcat.

And if it should /not/ be forwarded to Tomcat after all, then you should use a smart RewriteRule that will strip the ";jsessionid.." from these URI's, before Apache attempts to find them locally.





nohacks wrote:
Hi Chris,

I downloaded the new version of mod_jk

http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/linux/jk-1.2.28/i586/

[ ] mod_jk-1.2.28-httpd-2.2.X.so 21-Mar-2009 23:53 676K
I am still having the same issues as you can see...

Any ideal what is going on here??

Thanks
Phil



78.124.0.12 - - [04/May/2009:11:24:32 -0400] "GET /login.jsf HTTP/1.1" 200
3370 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR
1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0; FDM; .NET CLR 2.0.50727)"

============  404 here  ===============

78.124.0.12 - - [04/May/2009:11:24:33 -0400] "GET
/a4j_3_2_2-SNAPSHOTorg/richfaces/renderkit/html/css/basic_classes.xcss/DATB/eAF7sqpgb-jyGdIAFrMEaw__.jsf;jsessionid=7B8278D155437DE625509198918C08D4.tomcat2
HTTP/1.1" 404 7014 "http://www.myAppName.com/login.jsf"; "Mozilla/4.0
(compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322;
Media Center PC 4.0; FDM; .NET CLR 2.0.50727)"

============  404 here  ===============

78.124.0.12 - - [04/May/2009:11:24:33 -0400] "GET
/a4j_3_2_2-SNAPSHOTorg/richfaces/renderkit/html/css/extended_classes.xcss/DATB/eAF7sqpgb-jyGdIAFrMEaw__.jsf;jsessionid=7B8278D155437DE625509198918C08D4.tomcat2
HTTP/1.1" 404 7014 "http://www.myAppName.com/login.jsf"; "Mozilla/4.0
(compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322;
Media Center PC 4.0; FDM; .NET CLR 2.0.50727)"
78.124.0.12 - - [04/May/2009:11:24:33 -0400] "GET /css/stylesheet.css
HTTP/1.1" 304 - "http://www.myAppName.com/login.jsf"; "Mozilla/4.0
(compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322;
Media Center PC 4.0; FDM; .NET CLR 2.0.50727)"
78.124.0.12 - - [04/May/2009:11:24:33 -0400] "GET /js/jquery-1.2.3.pack.js
HTTP/1.1" 304 - "http://www.myAppName.com/login.jsf"; "Mozilla/4.0
(compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322;
Media Center PC 4.0; FDM; .NET CLR 2.0.50727)"
78.124.0.12 - - [04/May/2009:11:24:33 -0400] "GET
/js/jquery.jcarousel.pack.js HTTP/1.1" 304 -
"http://www.myAppName.com/login.jsf"; "Mozilla/4.0 (compatible; MSIE 7.0;
Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0;
FDM; .NET CLR 2.0.50727)"
78.124.0.12 - - [04/May/2009:11:24:33 -0400] "GET /css/jquery.jcarousel.css
HTTP/1.1" 304 - "http://www.myAppName.com/login.jsf"; "Mozilla/4.0
(compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322;
Media Center PC 4.0; FDM; .NET CLR 2.0.50727)"
78.124.0.12 - - [04/May/2009:11:24:33 -0400] "GET /css/skin.css HTTP/1.1"
304 - "http://www.myAppName.com/login.jsf"; "Mozilla/4.0 (compatible; MSIE
7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC
4.0; FDM; .NET CLR 2.0.50727)"
78.124.0.12 - - [04/May/2009:11:24:34 -0400] "GET
/images/prev-horizontal.png HTTP/1.1" 304 -
"http://www.myAppName.com/login.jsf"; "Mozilla/4.0 (compatible; MSIE 7.0;
Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0;
FDM; .NET CLR 2.0.50727)"
78.124.0.12 - - [04/May/2009:11:24:34 -0400] "GET
/images/next-horizontal.png HTTP/1.1" 304 -
"http://www.myAppName.com/login.jsf"; "Mozilla/4.0 (compatible; MSIE 7.0;
Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0;
FDM; .NET CLR 2.0.50727)"
78.124.0.12 - - [04/May/2009:11:24:42 -0400] "POST
/login.jsf;jsessionid=7B8278D155437DE625509198918C08D4.tomcat2 HTTP/1.1" 404
7014 "http://www.myAppName.com/login.jsf"; "Mozilla/4.0 (compatible; MSIE
7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC
4.0; FDM; .NET CLR 2.0.50727)"




nohacks wrote:
Hi Chris,

Thanks for your reply. I have JkStripSession on and still having the
issue.
Any help is really appreciated. I have had this issues for a long time now
and it is a Huge Issue for us !!
This is my httpd.conf file.

==================================
LoadModule jk_module /usr/lib/apache2/modules/mod_jk-1.2.27-httpd-2.2.6.so

JkStripSession On

JkMount /*.jsp loadbalancer
JkMount /*.jsf loadbalancer

# JkMount /*.jsp ajp13
# JkMount /*.jsf ajp13

JkWorkersFile workers.properties
JkShmFile     /var/log/httpd/mod_jk.shm
JkLogFile /opt/apache2log/mod_jk.log

# JkLogLevel    info

JkLogLevel    debug

JkOptions     +ForwardURIEscaped
JkOptions     +ForwardDirectories

FileETag None

ExpiresDefault "access plus 4 weeks"

# 480 weeks
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=490304000, public"
</FilesMatch>

ExpiresActive On
ExpiresByType image/gif A2592000
ExpiresByType image/png A2592000
ExpiresByType image/jpg A2592000
ExpiresByType image/jpeg A2592000

=========== end of httpd.conf ===========




Christopher Schultz-2 wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Nohacks,

On 4/30/2009 4:18 PM, nohacks wrote:
You can see from my logs that apache returns a 200 for my login page
then
returns a 404 from

It seems to be an issue now and then. It works for a while then it
tosses a
404. Maybe after a timeout I really dont know...Hard to recreate. but my
logs are full of 404 jsessionid issues...
I can tell you how to recreate it:

1. Log out of your application
2. Go to the login page

Result: your httpd logs are full of 404 errors for things like
mystylesheet.css;jsessionid=32456789 and
myloginimage.png;jsessionid=32456789.

The problem is that httpd thinks the ";jsesionid" is part of the path of
the resource, instead of a parameter. You can fix this either with
mod_rewrite (which is a bit heavy-handed) or you can use

JkStripSession On

if you are using a reasonably recent version of mod_jk.

Hope that helps,
- -chris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkn7UTEACgkQ9CaO5/Lv0PDwwgCcCjjHgsZI6oSDizZPpPxgMoD7
d+4An1SWaF/2Q32jyK2DiULpvPRWB4Hn
=iKFe
-----END PGP SIGNATURE-----

---------------------------------------------------------------------
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