Re: Problem forward HTTP / Soap request using mod_jk
Thanks so much for replies. Very much appreciated. In response to the questions: 1. I have an apache server in front of my tomcat. 2. The reason why I am doing this is because I wish to use multiple tomcats and have some load balancing. That didn't work, so in trying to diagnose the problem, I got rid all but one of the tomcat's behind the apache http server. This was to get the simpliest case using apache http server working first. 3. No I have seen no errors in any logs (apache or mod_jk) with extra logging. I see notices in error.log but they look benign. [Tue Nov 03 18:12:46 2009] [notice] IBM_HTTP_Server/6.1.0.9 Apache/2.0.47 configured -- resuming normal operations [Tue Nov 03 18:12:46 2009] [notice] Server built: Apr 12 2007 19:42:26 [Tue Nov 03 18:12:46 2009] [notice] Parent: Created child process 7724 [Tue Nov 03 18:12:47 2009] [notice] Child 7724: Child process is running [Tue Nov 03 18:12:47 2009] [notice] Child 7724: Acquired the start mutex. [Tue Nov 03 18:12:47 2009] [notice] Child 7724: Starting 250 worker threads. 4. Here is some debug logging from the mod_jk... [Tue Nov 03 18:12:47 2009] [7724:3508] [debug] jk_ajp_common.c (2562): setting connection pool size to 250 with min 125 and acquire timeout 200 [Tue Nov 03 18:12:47 2009] [7724:3508] [debug] jk_worker.c (146): about to create instance worker2 of ajp13 [Tue Nov 03 18:12:47 2009] [7724:3508] [debug] jk_worker.c (159): about to validate and init worker2 [Tue Nov 03 18:12:47 2009] [7724:3508] [debug] jk_ajp_common.c (2512): worker worker2 contact is 'localhost:23009' [Tue Nov 03 18:12:47 2009] [7724:3508] [debug] jk_ajp_common.c (2699): setting endpoint options: [Tue Nov 03 18:12:47 2009] [7724:3508] [debug] jk_ajp_common.c (2702): keepalive: 0 [Tue Nov 03 18:12:47 2009] [7724:3508] [debug] jk_ajp_common.c (2706): socket timeout: 0 [Tue Nov 03 18:12:47 2009] [7724:3508] [debug] jk_ajp_common.c (2710): socket connect timeout: 0 [Tue Nov 03 18:12:47 2009] [7724:3508] [debug] jk_ajp_common.c (2714): buffer size:0 [Tue Nov 03 18:12:47 2009] [7724:3508] [debug] jk_ajp_common.c (2718): pool timeout: 0 [Tue Nov 03 18:12:47 2009] [7724:3508] [debug] jk_ajp_common.c (2722): ping timeout: 1 [Tue Nov 03 18:12:47 2009] [7724:3508] [debug] jk_ajp_common.c (2726): connect timeout:0 [Tue Nov 03 18:12:47 2009] [7724:3508] [debug] jk_ajp_common.c (2730): reply timeout: 0 [Tue Nov 03 18:12:47 2009] [7724:3508] [debug] jk_ajp_common.c (2734): prepost timeout:0 [Tue Nov 03 18:12:47 2009] [7724:3508] [debug] jk_ajp_common.c (2738): recovery options: 0 [Tue Nov 03 18:12:47 2009] [7724:3508] [debug] jk_ajp_common.c (2742): retries:2 [Tue Nov 03 18:12:47 2009] [7724:3508] [debug] jk_ajp_common.c (2746): max packet size:8192 [Tue Nov 03 18:12:47 2009] [7724:3508] [debug] jk_ajp_common.c (2750): retry interval: 100 worker2 of type ajp13 (2) [Tue Nov 03 18:12:47 2009] [7724:3508] [debug] jk_worker.c (116): found a worker worker2 [Tue Nov 03 18:12:47 2009] [7724:3508] [debug] jk_worker.c (293): Found worker type 'ajp13' [Tue Nov 03 18:12:47 2009] [7724:3508] [debug] jk_uri_worker_map.c (512): Checking extension for worker 2: and then ... ue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_uri_worker_map.c (850): Attempting to map context URI '/docy=worker2' source 'JkMount' [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_uri_worker_map.c (873): Found an exact match '/docy=worker2' [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] mod_jk.c (2459): Into handler jakarta-servlet worker=worker2 r-proxyreq=0 [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_worker.c (116): found a worker worker2 [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_worker.c (339): Maintaining worker worker1 [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_worker.c (339): Maintaining worker worker2 [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_worker.c (339): Maintaining worker loadbalancer [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_lb_worker.c (670): decay with 2^1 [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_worker.c (293): Found worker type 'ajp13' [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] mod_jk.c (977): Service protocol=HTTP/1.1 method=POST ssl=false host=(null) addr=192.168.125.90 name=ied031 port=8080 auth=(null) user=(null) laddr=192.168.125.90 raddr=192.168.125.90 uri=/docy [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (2977): acquired connection pool slot=0 after 0 retries [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (605): ajp marshaling done [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (2283): processing worker2 with 2 retries [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1501): (worker2) all endpoints are disconnected. [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_connect.c (452): socket TCP_NODELAY set to On [Tue Nov 03 18:14:30 2009] [7724:3132]
Re: Problem forward HTTP / Soap request using mod_jk
breako wrote: Thanks so much for replies. Very much appreciated. In response to the questions: 1. I have an apache server in front of my tomcat. 2. The reason why I am doing this is because I wish to use multiple tomcats and have some load balancing. That didn't work, so in trying to diagnose the problem, I got rid all but one of the tomcat's behind the apache http server. This was to get the simpliest case using apache http server working first. 3. No I have seen no errors in any logs (apache or mod_jk) with extra logging. I see notices in error.log but they look benign. [Tue Nov 03 18:12:46 2009] [notice] IBM_HTTP_Server/6.1.0.9 Apache/2.0.47 configured -- resuming normal operations [Tue Nov 03 18:12:46 2009] [notice] Server built: Apr 12 2007 19:42:26 [Tue Nov 03 18:12:46 2009] [notice] Parent: Created child process 7724 [Tue Nov 03 18:12:47 2009] [notice] Child 7724: Child process is running [Tue Nov 03 18:12:47 2009] [notice] Child 7724: Acquired the start mutex. [Tue Nov 03 18:12:47 2009] [notice] Child 7724: Starting 250 worker threads. 4. Here is some debug logging from the mod_jk... ... All this log looks pretty normal and then ... Indeed, that is where it becomes interesting ue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_uri_worker_map.c (850): Attempting to map context URI '/docy=worker2' source 'JkMount' [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_uri_worker_map.c (873): Found an exact match '/docy=worker2' [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] mod_jk.c (2459): Into handler ... [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] mod_jk.c (977): Service protocol=HTTP/1.1 method=POST ssl=false host=(null) addr=192.168.125.90 name=ied031 port=8080 auth=(null) user=(null) laddr=192.168.125.90 raddr=192.168.125.90 uri=/docy .. so mod_jk got the request to /docy and is processing it ... and then several of this logs... and that is where it would start becoming interesting, but you have cut it off... So, what happens next ? I mean, you should see the request that is being sent to Tomcat, then Tomcat's answer. Another question : what, on the Tomcat side, is supposed to process requests to /docy ? - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
Re: Problem forward HTTP / Soap request using mod_jk
Thanks so much for getting back to me. It's just a java process that is supposed to process requests from docy. This all works when it's just one tomcat as a client and one tomcat as a server with no apache http server infront of the server. Here is part of the request I edited out... [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (931): Connected socket 4536 to (127.0.0.1:23009) [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): sending to ajp13 pos=4 len=388 max=8192 [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): 12 34 01 80 02 04 00 08 48 54 54 50 2F 31 2E 31 - .4..HTTP/1.1 [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): 0010 00 00 28 2F 66 69 6E 65 6F 73 2D 64 6F 63 70 72 - ..(/docy...19 [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): 0040 32 2E 31 36 38 2E 31 32 35 2E 39 30 00 FF FF 00 - 2.168.125.90 [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): 0050 06 69 65 64 30 33 31 00 1F 90 00 00 04 A0 07 00 - .ied031. [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): 0060 E9 6D 75 6C 74 69 70 61 72 74 2F 72 65 6C 61 74 - .multipart/relat [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): 0070 65 64 3B 20 62 6F 75 6E 64 61 72 79 3D 4D 49 4D - ed;.boundary=MIM [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): 0080 45 42 6F 75 6E 64 61 72 79 75 72 6E 5F 75 75 69 - EBoundaryurn_uui [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): 0090 64 5F 33 43 34 37 37 31 43 35 46 31 45 31 36 34 - d_3C4771C5F1E164 [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): 00a0 37 44 41 38 31 32 35 37 32 37 32 30 37 31 30 31 - 7DA8125727207101 [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): 00b0 37 3B 20 74 79 70 65 3D 22 61 70 70 6C 69 63 61 - 7;.type=applica [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): 00c0 74 69 6F 6E 2F 78 6F 70 2B 78 6D 6C 22 3B 20 73 - tion/xop+xml;.s [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): 00d0 74 61 72 74 3D 22 3C 30 2E 75 72 6E 3A 75 75 69 - tart=0.urn:uui [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): 00e0 64 3A 33 43 34 37 37 31 43 35 46 31 45 31 36 34 - d:3C4771C5F1E164 [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): 00f0 37 44 41 38 31 32 35 37 32 37 32 30 37 31 30 31 - 7DA8125727207101 [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): 0100 38 40 61 70 61 63 68 65 2E 6F 72 67 3E 22 3B 20 - 8...@apache.org;. [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): 0110 73 74 61 72 74 2D 69 6E 66 6F 3D 22 61 70 70 6C - start-info=appl [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): 0120 69 63 61 74 69 6F 6E 2F 73 6F 61 70 2B 78 6D 6C - ication/soap+xml [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): 0130 22 3B 20 61 63 74 69 6F 6E 3D 22 75 72 6E 3A 73 - ;.action=urn:s [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): 0140 61 76 65 41 73 57 6F 72 64 22 00 A0 0E 00 05 41 - aveAsWord.A [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): 0150 78 69 73 32 00 A0 0B 00 0B 69 65 64 30 33 31 3A - xis2.ied031: [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): 0160 38 30 38 30 00 00 11 54 72 61 6E 73 66 65 72 2D - 8080...Transfer- [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): 0170 45 6E 63 6F 64 69 6E 67 00 00 07 63 68 75 6E 6B - Encoding...chunk [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): 0180 65 64 00 FF 00 00 00 00 00 00 00 00 00 00 00 00 - ed.. [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1560): (worker2) request body to send 0 - request body to resend 0 So this is where it ends, this request never makes to the tomcat server. Note 1: The web context on the server isn't called docy. It's the doc_(The name of the project I am working on) which I have had to edit out. Note 2: I have a simple Helloworld.jsp also running on the server which I can send notmal HTTP requests to via the apache server. So I am 100% confident all the bog standard stuff is set up correctly. Any help would be greatly appreciated. -- View this message in context: http://old.nabble.com/Problem-forward-HTTP---Soap-request-using-mod_jk-tp26160709p26196676.html Sent from the Tomcat - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
Re: Problem forward HTTP / Soap request using mod_jk
See at bottom. breako wrote: Thanks so much for getting back to me. It's just a java process that is supposed to process requests from docy. This all works when it's just one tomcat as a client and one tomcat as a server with no apache http server infront of the server. Here is part of the request I edited out... [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (931): Connected socket 4536 to (127.0.0.1:23009) [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): sending to ajp13 pos=4 len=388 max=8192 [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): 12 34 01 80 02 04 00 08 48 54 54 50 2F 31 2E 31 - .4..HTTP/1.1 [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): 0010 00 00 28 2F 66 69 6E 65 6F 73 2D 64 6F 63 70 72 - ..(/docy...19 ... 45 6E 63 6F 64 69 6E 67 00 00 07 63 68 75 6E 6B - Encoding...chunk [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1070): 0180 65 64 00 FF 00 00 00 00 00 00 00 00 00 00 00 00 - ed.. [Tue Nov 03 18:14:30 2009] [7724:3132] [debug] jk_ajp_common.c (1560): (worker2) request body to send 0 - request body to resend 0 So this is where it ends, this request never makes to the tomcat server. Well, it probably does. But to me, it looks like Tomcat does not know what to do with it. Or else, I misinterpret what you are saying below, or there is a piece missing in your explanation. Note 1: The web context on the server isn't called docy. It's the doc_(The name of the project I am working on) which I have had to edit out. Note 2: I have a simple Helloworld.jsp also running on the server which I can send notmal HTTP requests to via the apache server. So I am 100% confident all the bog standard stuff is set up correctly. Well yes, it looks like indeed the Apache - mod_jk - Tomcat communication part is set up properly and is working. But it would seem that the request you are sending to Apache is a POST request, to the URL /docy (or whatever). Then mod_jk is trying to forward this request to Tomcat, using the same request URL /docy. However, I have a feeling that, although this request is a POST (supposed to contain a request body), and the HTTP headers seem to indicate that there should be a body, in fact it does not contain any request body. Another thing is that for Tomcat to respond sensibly to a request for /docy (or whatever), should have an application at the Tomcat side that is set up to respond to /docy (or whatever) with something. To tell you the truth, I am now lost, and I don't know if what you are testing through Apache, and for which you have been showing the logs, really represents what you are trying to achieve, or if maybe you are testing different things when going through Apache as opposed to when you are not. Tell me some more things : When you have your initial setup, where one Tomcat talks to the other directly, - which port do you use on the server Tomcat ? (can you show the corresponding Connector of your Tomcat server.xml file) - how does the client Tomcat connect to that port and send a request to it ? - is that request then pure HTTP ? (even if inside, there is a SOAP message) - and later, when you have changed your setup to have the client Tomcat now talk to the Apache server, instead of to the server Tomcat directly, are you using the exact same request from the client Tomcat ? Coming back on your Note 2 above : it would probably be useful to compare the mod_jk log between these two cases : when you are requesting the URL /HelloWorld and when you are requestion /docy (or whatever), and look where the difference is. What may also be useful, is to configure this within your Tomcat : http://tomcat.apache.org/tomcat-6.0-doc/config/valve.html (AccessLogValve) There is probably a commented-out example is your server.xml. Uncomment it. It will log the requests which Tomcat does receive, through whatever port. - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
Re: Problem forward HTTP / Soap request using mod_jk
You are correct it is a post and it is missing a body. However, I used a utility tool TCPMon, to sniff what was being sent to the Apache Http Server. This does include a body, wrapped in XML tags. I do not know why Apache Http Server does not forward this to my tomcat server. The difference between my Tomcat client -- Tomcat server set up and my Tomcat client -- Apache -- Tomcat server, is that the former communicates only over HTTP ports. There is no AJP. The Tomcat client knows which HTTP port the Tomcat server is running on. Whereas, in the later, Apache only knows about the AJP port of the Tomcat Server (which is 23009). It does not know about the HTTP port on the Tomcat Server (which is 23080), I wonder does it need to send PUT http requests with body? To answer your specific questions: When you have your initial setup, where one Tomcat talks to the other directly Question 1. which port do you use on the server Tomcat ? (can you show the corresponding Connector of your Tomcat server.xml file) Connector acceptCount=100 connectionTimeout=2 disableUploadTimeout=true enableLookups=false maxHttpHeaderSize=8192 maxSpareThreads=75 maxThreads=150 minSpareThreads=25 port=23080 redirectPort=7443/ Connector enableLookups=false port=23009 protocol=AJP/1.3 redirectPort=8443/ Question 2. how does the client Tomcat connect to that port and send a request to it ? It is implemented as a Axis2 SOAP service. Question 3. is that request then pure HTTP ? (even if inside, there is a SOAP message) I am not sure quite what you mean, by pure HTTP. In both cases the tomcat client sends out the same HTTP message. The only difference is the port is being sent to. The TCPMon sniffs this as: POST /docy HTTP/1.1 Content-Type: application/soap+xml; charset=UTF-8; action=urn:saveAsWord User-Agent: Axis2 Host: 127.0.0.1:8080 Transfer-Encoding: chunked 861 ?xml version='1.0' encoding='UTF-8'?soapenv:Envelope xmlns:soapenv=http://www.w3.org/2003/05/soap-envelope;soapenv:Header wsse:Security xmlns:wsse=http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd; soapenv:mustUnderstand=truewsse:UsernameToken xmlns:wsu=http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd; wsu:Id=UsernameToken-4326799wsse:UsernameOASIS/wsse:Usernamewsse:Password Type=http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText;OASIS/wsse:Password/wsse:UsernameToken/wsse:Security/soapenv:Headersoapenv:Bodyns1:saveAsWord xmlns:ns1=http://www.fineos.com/frontoffice/documentproduction/operationtypes;encodedHtmlFileYmVnaW4gNjQ0IHppcGZpbGUNCk00JEwjISEwICIgICggKTIlOSNMICAgICAgICAgICAgICAgIEYgICAgOUZFTjk2XVM5Jl1DPTZVRTtHMVAKTTxGXUQ9Ni1UOjZdTj0mNU08JlFBPSY0Ti0zKFIsUz4tREVVT1ZSIDRBTlxDXjNcQFdfMCo4U01JVTtLJgpNNElIVVU6MlVKW0koTllSKFAwRDonUVowTi1GTydfQEM6VzxRNTRBUFAjU08uPlxRVDJSOkU3TEchN0I1Ck0wTUUiWF9BQDUmJ0svOS8kMExFS0haVU4nKlJVKyczM1wpSi0yUVMtIUozWyAtKUkwXFwgPTlYWDwlSkwKTVxPNEIyWyw0N0VXPlM2JjZUMFBOXFlMVTMtL0UsRFU3Vj4rWi5JXEgnLl49OlBOJE5KWStOR0ZCUzBZTQpNN00jK18wSiZcQT1JNyQ2XSVUOkhDVEspJyAkIUA+UzdAMV9RMkJPJ0UoLjs0XE0gLzZRUFstQkswWCZfCk0hPzY+JixMPFtLQkJOSyxQUlJfU14qUkRCJjNYVj5DPTlXSkZPV00zUjI9PSdaMz9PO19ZUCEwU1EmR1MKTS1dN0NVITwwLicjU0NfOTdQVz08PzAgMTcvVCRBQEZcWUgrIStdUFpMIz5MUDcmIiZKWjhNRzJMSiM2OgpNJ0ZLJ0BZSUwhNydMMV4sMUJcKEwvKT9YUU86MkNDTyFKRzUvQFxEMD4jW1M4IywqRSZCWCZDSF1DPSpaCk1UWU5DJERXWyRIV19QSD07MzRdICQrNyNdVF9QWDBbVD1fIiUoVU8oPzdHRjIkMFFPVEsyVUVULCAuNScKTTQgTUIrP1smXkFKUlg7UD0zUV5NP00pJiRFJjVWWkpUKzUmMzlOL10wTE1fTFIpOyEsJTs6Mzc8PExLQQpNRlJfWUQmSlAnLFdeWlVENzs1NkI4MFopXy4pM0hHOEgiL0UqUVJCOCcsL1BJLVlVOjFBXyAlISshUEA6Ck1NXVRfVFAkICAmWCMgICEwMlAkIiUgIDQgIEAgIiAiNEE2MFsmSz89L10sISAgIU4gUCAgKUAgICAgICAKTSAgICAgICAgICAgICAgICA5RkVOOTZdUzkmXUM9NlVFO0cxUDxGXUQ9Ni1UOjZdTj0mNU08JlFBPSY0Tgo7LTMoUixTPTAyUDQmICAgICAgJCAgMCE0ICAgIClQKCAgICAgCiAKZW5kDQo=/encodedHtmlFileparentDirName\\ied031\SharedDocs/2009/11/4//parentDirName/ns1:saveAsWord/soapenv:Body/soapenv:Envelope 0 Question 4. - and later, when you have changed your setup to have the client Tomcat now talk to the Apache server, instead of to the server Tomcat directly, are you using the exact same request from the client Tomcat ? Answer: Yes. Question 5. it would probably be useful to compare the mod_jk log between these two cases : when you are requesting the URL /HelloWorld and when you are requestion /docy (or whatever), and look where the difference is. Answer: I have done this. The /HelloWorl comes straight from a web browser and is a GET request. The Mod_JK shows it sent and then a response back. again thanks for any help and apologies in the lack of clarity in my explanations. I wonder couild this be something do with Apache only knowing about the tomcat server's AJP port and not it's http port? -- View this message in context: http://old.nabble.com/Problem-forward-HTTP---Soap-request-using-mod_jk-tp26160709p26200363.html Sent from the Tomcat - User mailing list archive
Re: Problem forward HTTP / Soap request using mod_jk
Note, I turned off MIME boundaries as I thought this was the problem. That is what the HTTP request as spotted by TCPMOM does not contain MIME boundaries. The corresponding Mod_JK is... ed Nov 04 16:52:55 2009] [5024:4688] [debug] jk_ajp_common.c (1070): sending to ajp13 pos=4 len=216 max=8192 [Wed Nov 04 16:52:55 2009] [5024:4688] [debug] jk_ajp_common.c (1070): 12 34 00 D4 02 04 00 08 48 54 54 50 2F 31 2E 31 - .4..HTTP/1.1 [Wed Nov 04 16:52:55 2009] [5024:4688] [debug] jk_ajp_common.c (1070): 0010 00 00 28 2F 66 69 6E 65 6F 73 2D 64 6F 63 70 72 - ..(/docy...12 [Wed Nov 04 16:52:55 2009] [5024:4688] [debug] jk_ajp_common.c (1070): 0040 37 2E 30 2E 30 2E 31 00 FF FF 00 09 31 32 37 2E - 7.0.0.1.127. [Wed Nov 04 16:52:55 2009] [5024:4688] [debug] jk_ajp_common.c (1070): 0050 30 2E 30 2E 31 00 1F 90 00 00 04 A0 07 00 3C 61 - 0.0.1.a [Wed Nov 04 16:52:55 2009] [5024:4688] [debug] jk_ajp_common.c (1070): 0060 70 70 6C 69 63 61 74 69 6F 6E 2F 73 6F 61 70 2B - pplication/soap+ [Wed Nov 04 16:52:55 2009] [5024:4688] [debug] jk_ajp_common.c (1070): 0070 78 6D 6C 3B 20 63 68 61 72 73 65 74 3D 55 54 46 - xml;.charset=UTF [Wed Nov 04 16:52:55 2009] [5024:4688] [debug] jk_ajp_common.c (1070): 0080 2D 38 3B 20 61 63 74 69 6F 6E 3D 22 75 72 6E 3A - -8;.action=urn: [Wed Nov 04 16:52:55 2009] [5024:4688] [debug] jk_ajp_common.c (1070): 0090 73 61 76 65 41 73 57 6F 72 64 22 00 A0 0E 00 05 - saveAsWord. [Wed Nov 04 16:52:55 2009] [5024:4688] [debug] jk_ajp_common.c (1070): 00a0 41 78 69 73 32 00 A0 0B 00 0E 31 32 37 2E 30 2E - Axis2.127.0. [Wed Nov 04 16:52:55 2009] [5024:4688] [debug] jk_ajp_common.c (1070): 00b0 30 2E 31 3A 38 30 38 30 00 00 11 54 72 61 6E 73 - 0.1:8080...Trans [Wed Nov 04 16:52:55 2009] [5024:4688] [debug] jk_ajp_common.c (1070): 00c0 66 65 72 2D 45 6E 63 6F 64 69 6E 67 00 00 07 63 - fer-Encoding...c [Wed Nov 04 16:52:55 2009] [5024:4688] [debug] jk_ajp_common.c (1070): 00d0 68 75 6E 6B 65 64 00 FF 00 00 00 00 00 00 00 00 - hunked.. [Wed Nov 04 16:52:55 2009] [5024:4688] [debug] jk_ajp_common.c (1560): (worker2) request body to send 0 - request body to resend 0 -- View this message in context: http://old.nabble.com/Problem-forward-HTTP---Soap-request-using-mod_jk-tp26160709p26200448.html Sent from the Tomcat - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
Re: Problem forward HTTP / Soap request using mod_jk
breako wrote: ... I wonder couild this be something do with Apache only knowing about the tomcat server's AJP port and not it's http port? I have to go right now, but I will answer this one quickly : You do not have to use mod_jk as a connector between Apache and Tomcat. There are two other ways : 1) use straight HTTP proxying, using the mod_proxy and mod_proxy_http Apache modules. In that case, your target Connector in Tomcat is the standard HTTP one, like you did from the original Tomcat client. 2) use mod_proxy and mod_proxy_ajp. In that case, the target is the same Connector as for mod_jk, and the protocol is also AJP. With both the above, you can also use balancing. Look up httpd.apache.org - 2.2. documentation - modules - P for proxy - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
RE: Problem forward HTTP / Soap request using mod_jk
Did you add a load blancer worker to your workers.properties? Below is what I use to perform load balancing over two Tomcat servers. I have a similar scenario: Apache in front of two (or more Tomcats). Apache forwards the requests using mod_jk. My client is sending SOAP requests using Axis2. worker.list= wlb, jkwatch ## # Defining a load balancer worker ## worker.wlb.type=lb worker.wlb.balance_workers=tomcatserver1, tomcatserver2 worker.wlb.max_reply_timeouts=3 # worker.wlb.retries=2 # worker.wlb.retry_interval=100 # worker.wlb.sticky_session=True # worker.wlb.sticky_session_force=False # worker.wlb.method=Request # worker.wlb.lock=Optimistic ## # Defining the status workers ## # A read-only status worker worker.jkwatch.type=status worker.jkwatch.read_only=True worker.jkwatch.mount=/private/admin/watch/jk # A managing status worker # worker.jkmanage.type=status # worker.jkmanage.mount=/private/admin/manage/jk ## ## Balanced Workers (Tomcat Workers) ## ## # Tomcat Worker (tomcatserver1) ## worker.tomcatserver1.type=ajp13 worker.tomcatserver1.host=localhost worker.tomcatserver1.port=8009 worker.tomcatserver1.lbfactor=1 # Connection pool timeout is set in seconds. (10 minutes). If you modify this # value, you need to modify the AJP connector in the Tomcat server.xml to # match this value. Note that the value in Tomcat must be specified in milliseconds. worker.tomcatserver1.connection_pool_timeout=600 worker.tomcatserver1.socket_keepalive=True worker.tomcatserver1.socket_timeout=60 ## worker.tomcatserver1.socket_connect_timeout=60 # # Apache will wait 30 seconds (30,000 ms) for Tomcat to respond, otherwise # it will return error 504 - Gateway timeout to the client worker.tomcatserver1.reply_timeout=3 # # This recovery_options attribute is a bit mask. # The following bits are allowed: # 1: don't recover if Tomcat failed after getting the request # 2: don't recover if Tomcat failed after sending the headers to client # 4: close the connection to Tomcat, if we detect an error when writing back the answer to the client (browser) # 8: always recover requests for HTTP method HEAD (even if Bits 1 or 2 are set) # 16: always recover requests for HTTP method GET (even if Bits 1 or 2 are set) # We will set it to 27, equivalent to the binary 11011 worker.tomcatserver1.recovery_options=27 ## # Tomcat Worker (tomcatserver2) ## worker.tomcatserver2.type=ajp13 worker.tomcatserver2.host=localhost worker.tomcatserver2.port=7009 worker.tomcatserver2.lbfactor=1 # Connection pool timeout is set in seconds. (10 minutes). If you modify this # value, you need to modify the AJP connector in the Tomcat server.xml to # match this value. Note that the value in Tomcat must be specified in milliseconds. worker.tomcatserver2.connection_pool_timeout=600 worker.tomcatserver2.socket_keepalive=True worker.tomcatserver2.socket_timeout=60 ## worker.tomcatserver2.socket_connect_timeout=60 # # Apache will wait 30 seconds (30,000 ms) for Tomcat to respond, otherwise # it will return error 504 - Gateway timeout to the client worker.tomcatserver2.reply_timeout=3 # # This recovery_options attribute is a bit mask. # The following bits are allowed: # 1: don't recover if Tomcat failed after getting the request # 2: don't recover if Tomcat failed after sending the headers to client # 4: close the connection to Tomcat, if we detect an error when writing back the answer to the client (browser) # 8: always recover requests for HTTP method HEAD (even if Bits 1 or 2 are set) # 16: always recover requests for HTTP method GET (even if Bits 1 or 2 are set) # We will set it to 27, equivalent to the binary 11011 worker.tomcatserver2.recovery_options=27 -Original Message- From: breako [mailto:alex.stave...@fineos.com] Sent: Tuesday, November 03, 2009 1:35 PM To: users@tomcat.apache.org Subject: Problem forward HTTP / Soap request using mod_jk Hi, I have two tomcat servers and I can make them talk to each other using soap / http no problem. However, when I put Apache infront of one my tomcat servers and set it up to forward http requests to the tomcat server it doesn't get any requests. I am using the mod_jk to achieve the forwarding. I have tested other types of http
RE: Problem forward HTTP / Soap request using mod_jk
Your uriworkermap.properties must send the requests to the laod balancer worker Here is a sample uriworkermap.properties -Jorge # This file provides mapping for the wlb worker # defined in workers.properties. # The general syntax for this file is: # [URL]=[Worker name] /yourappcontext=wlb /yourappcontext/*=wlb # Lets also define an URI to access the status workers /private/admin/watch/jk=jkwatch #/private/admin/manage/jk=jkmanage -Original Message- From: Jorge Medina [mailto:jmed...@e-dialog.com] Sent: Wednesday, November 04, 2009 3:15 PM To: Tomcat Users List Subject: RE: Problem forward HTTP / Soap request using mod_jk Did you add a load blancer worker to your workers.properties? Below is what I use to perform load balancing over two Tomcat servers. I have a similar scenario: Apache in front of two (or more Tomcats). Apache forwards the requests using mod_jk. My client is sending SOAP requests using Axis2. worker.list= wlb, jkwatch ## # Defining a load balancer worker ## worker.wlb.type=lb worker.wlb.balance_workers=tomcatserver1, tomcatserver2 worker.wlb.max_reply_timeouts=3 # worker.wlb.retries=2 # worker.wlb.retry_interval=100 # worker.wlb.sticky_session=True # worker.wlb.sticky_session_force=False # worker.wlb.method=Request # worker.wlb.lock=Optimistic ## # Defining the status workers ## # A read-only status worker worker.jkwatch.type=status worker.jkwatch.read_only=True worker.jkwatch.mount=/private/admin/watch/jk # A managing status worker # worker.jkmanage.type=status # worker.jkmanage.mount=/private/admin/manage/jk ## ## Balanced Workers (Tomcat Workers) ## ## # Tomcat Worker (tomcatserver1) ## worker.tomcatserver1.type=ajp13 worker.tomcatserver1.host=localhost worker.tomcatserver1.port=8009 worker.tomcatserver1.lbfactor=1 # Connection pool timeout is set in seconds. (10 minutes). If you modify this # value, you need to modify the AJP connector in the Tomcat server.xml to # match this value. Note that the value in Tomcat must be specified in milliseconds. worker.tomcatserver1.connection_pool_timeout=600 worker.tomcatserver1.socket_keepalive=True worker.tomcatserver1.socket_timeout=60 ## worker.tomcatserver1.socket_connect_timeout=60 # # Apache will wait 30 seconds (30,000 ms) for Tomcat to respond, otherwise # it will return error 504 - Gateway timeout to the client worker.tomcatserver1.reply_timeout=3 # # This recovery_options attribute is a bit mask. # The following bits are allowed: # 1: don't recover if Tomcat failed after getting the request # 2: don't recover if Tomcat failed after sending the headers to client # 4: close the connection to Tomcat, if we detect an error when writing back the answer to the client (browser) # 8: always recover requests for HTTP method HEAD (even if Bits 1 or 2 are set) # 16: always recover requests for HTTP method GET (even if Bits 1 or 2 are set) # We will set it to 27, equivalent to the binary 11011 worker.tomcatserver1.recovery_options=27 ## # Tomcat Worker (tomcatserver2) ## worker.tomcatserver2.type=ajp13 worker.tomcatserver2.host=localhost worker.tomcatserver2.port=7009 worker.tomcatserver2.lbfactor=1 # Connection pool timeout is set in seconds. (10 minutes). If you modify this # value, you need to modify the AJP connector in the Tomcat server.xml to # match this value. Note that the value in Tomcat must be specified in milliseconds. worker.tomcatserver2.connection_pool_timeout=600 worker.tomcatserver2.socket_keepalive=True worker.tomcatserver2.socket_timeout=60 ## worker.tomcatserver2.socket_connect_timeout=60 # # Apache will wait 30 seconds (30,000 ms) for Tomcat to respond, otherwise # it will return error 504 - Gateway timeout to the client worker.tomcatserver2.reply_timeout=3 # # This recovery_options attribute is a bit mask. # The following bits are allowed: # 1: don't recover if Tomcat failed after getting the request # 2: don't recover if Tomcat failed after sending the headers to client # 4: close the connection to Tomcat, if we detect an error when writing back the answer to the client (browser) # 8: always recover requests for HTTP method HEAD (even if Bits 1 or 2 are set) # 16: always recover requests for HTTP method GET (even if Bits 1
RE: Problem forward HTTP / Soap request using mod_jk
Thanks to all. I am at home now but will try your suggestions tomorrow. I was just wondering why I would need a load balancer, uriproperties file or a status worker just because it is a HTTP POST SOAP request? I am able to get all other http requests forwarded to my tomcat server without the above... -- View this message in context: http://old.nabble.com/Problem-forward-HTTP---Soap-request-using-mod_jk-tp26160709p26204973.html Sent from the Tomcat - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
RE: Problem forward HTTP / Soap request using mod_jk
No, you don't need the load balancer if you only have one Tomcat behind your Apache server. The status worker is not needed either, but it allows you to monitor the state of the load balancer and the workers from a browser. (You can even enable/disable workers) -Original Message- From: breaks [mailto:astave...@yahoo.com] Sent: Wednesday, November 04, 2009 4:57 PM To: users@tomcat.apache.org Subject: RE: Problem forward HTTP / Soap request using mod_jk Thanks to all. I am at home now but will try your suggestions tomorrow. I was just wondering why I would need a load balancer, uriproperties file or a status worker just because it is a HTTP POST SOAP request? I am able to get all other http requests forwarded to my tomcat server without the above... -- View this message in context: http://old.nabble.com/Problem-forward-HTTP---Soap-request-using-mod_jk-tp26160709p26204973.html Sent from the Tomcat - User mailing list archive at Nabble.com. - 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
Re: Problem forward HTTP / Soap request using mod_jk
breako wrote: Hi, I have two tomcat servers and I can make them talk to each other using soap / http no problem. I am tempted to ask what they are talking about, but I won't. However, when I put Apache infront of one my tomcat servers and set it up to forward http requests to the tomcat server it doesn't get any requests. Who is it ? Apache or Tomcat ? I am using the mod_jk to achieve the forwarding. I have tested other types of http forwarding, and they are all ok. For example ? Do you mean other than mod_jk, or other than SOAP ? So I am confident, I have my workers.properties, ajp ports etc set up ok. That's nice. I am getting no error messages in my mod_jk logfile. And are you getting messages anywhere else, for these requests that supposedly arrive and don't go anywhere ? (such as, in the Apache logs for instance) I wonder can mod_jk only forward only certain types of http requests? Only HTTP requests. But all your SOAP requests are also standard HTTP requests, right ? Any ideas? Apache Http Server: Apache/2.0.47 Tomcat Version: Tomcat/5.5.12 I have to use these versions for the project I am working on. thanks. httpd.conf ... # Load the jk module. LoadModule jk_module modules/mod_jk.so # Specify the workers.properties file location # This is where the tomcat instances are defined JkWorkersFile conf/workers.properties JkLogFile logs/mod_jk.log JkLogLevelerror You could set the above level to info and maybe even debug for a while. You will get more details in the logfile. JkLogStampFormat [%a %b %d %H:%M:%S %Y] JkRequestLogFormat %B %H %r %s %w %V %T # Set up the URLs for request forwarding. JkMount /HelloWorld/* worker2 JkMount /* worker2 == see below (***) JkMount /docy worker2 (***) - with that rule, you don't really need the others, as it covers everything - the question is however, if you use that rule (and proxy everything to Tomcat) then why do you need Apache in front ? Workers.properties ... # Define 1 real worker using ajp13 worker.list=worker2 # Set properties for worker2 (ajp13) worker.worker2.type=ajp13 worker.worker2.host=localhost worker.worker2.port=23009 worker.worker2.lbfactor=1 That looks OK, if your Tomcat has a Connector of type AJP and listening on port 23009. - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
Re: Problem forward HTTP / Soap request using mod_jk
On 03.11.2009 19:35, breako wrote: Hi, I have two tomcat servers and I can make them talk to each other using soap / http no problem. However, when I put Apache infront of one my tomcat servers and set it up to forward http requests to the tomcat server it doesn't get any requests. I am using the mod_jk to achieve the forwarding. I have tested other types of http forwarding, and they are all ok. So I am confident, I have my workers.properties, ajp ports etc set up ok. I am getting no error messages in my mod_jk logfile. I wonder can mod_jk only forward only certain types of http requests? Any ideas? Apache Http Server: Apache/2.0.47 Tomcat Version: Tomcat/5.5.12 I have to use these versions for the project I am working on. thanks. httpd.conf ... # Load the jk module. LoadModule jk_module modules/mod_jk.so # Specify the workers.properties file location # This is where the tomcat instances are defined JkWorkersFile conf/workers.properties JkLogFile logs/mod_jk.log JkLogLevelerror JkLogStampFormat [%a %b %d %H:%M:%S %Y] JkRequestLogFormat %B %H %r %s %w %V %T # Set up the URLs for request forwarding. JkMount /HelloWorld/* worker2 JkMount /* worker2 JkMount /docy worker2 Workers.properties ... # Define 1 real worker using ajp13 worker.list=worker2 # Set properties for worker2 (ajp13) worker.worker2.type=ajp13 worker.worker2.host=localhost worker.worker2.port=23009 worker.worker2.lbfactor=1 The only limitation I'm aware of is when using huge request headers. There's a default 8KB Limit for all request headers together. Another thing: if you have VirtualHost elements in your Apache configuration, you have to either put the JkMount dircetives into the VirtualHost that handles your request, or add JkMountCopy On to it, or add JkMountCopy All to the global server. If you can easily reproduce on a test system, set JkLogLevel to trace, do a single request and make the jk log file available. Regards, Rainer - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org