> On 5/31/17 8:42 AM, Nicholas Cottrell wrote: >> Hi All! >> >> I'm having a problem setting up an existing webapp from Apache >> 2.2/Tomcat6 on a new server running Centos 7, and the following >> packages: >> >> httpd 2.4.6-45.el7.centos.4 tomcat.noarch >> 7.0.69-11.el7_3 @updates tomcat-native.x86_64 >> 1.1.34-1.el7 @epel >> >> For debugging I have enabled AJP/1.3 and 8009 and HTTP on 8080, >> then use Apache to ProxyPass. >> >> With my initial configuration, data from a form POST is not >> available via request.getParameter: >> >> ProxyPass / ajp://localhost:8009/ <ajp://localhost:8009/> >> <ajp://localhost:8009/ <ajp://localhost:8009/>> retry=1 >> acquire=3000 timeout=600 Keepalive=On ProxyPassReverse / >> ajp://localhost:8009/ <ajp://localhost:8009/> <ajp://localhost:8009/ >> <ajp://localhost:8009/>> >> >> But changing it to this fixes everything: >> >> ProxyPass / http://localhost:8080/ <http://localhost:8080/> >> <http://localhost:8080/ <http://localhost:8080/>> retry=1 >> acquire=3000 timeout=600 Keepalive=On ProxyPassReverse / >> http://localhost:8080/ <http://localhost:8080/> <http://localhost:8080/ >> <http://localhost:8080/>> >> >> In the broken instance, request.getParameter("x") returned null, >> but request.getReader() returned bytes with "x=123" so seems that >> Apache is sending the POST body but Tomcat is not processing it >> correctly, yes? >> >> Please also see >> https://stackoverflow.com/questions/44167876/problems-with-post-parame >> <https://stackoverflow.com/questions/44167876/problems-with-post-parame> > ters-with-tomcat-ajp-on-apache-2-4-but-not-2-2 >> <https://stackoverflow.com/questions/44167876/problems-with-post-param >> <https://stackoverflow.com/questions/44167876/problems-with-post-param> > eters-with-tomcat-ajp-on-apache-2-4-but-not-2-2> >> for my steps so far. >> >> I would prefer to switch back to AJP for the proxy, since I >> understand it is more performant, right? Should I try forcing a >> Tomcat 8 install to see if the problem persists there too? > > If you call request.getReader/getInputStream before any of the > request.getParameter family of methods, then all request.getParameter* > methods will return null. That's because Tomcat must consume the > request body in order to parse POST parameters. If you call > request.getReader/getInputStream, then Tomcat assumes that you will be > handling the request body (and any associated parameters therein). > > Is it possible that you are "damaging" the request by inspecting the > request body?
I've been thinking about that but I don't call getReader/getInputStream anywhere myself. Also, the fact that accessing the same page via 8080 directly to Tomcat works, but via Apache/AJP through Tomcat's port 8009 works fine, and setting the proxy to use the 8080 also works.