https://bz.apache.org/bugzilla/show_bug.cgi?id=62371
Bug ID: 62371
Summary: Improve logging in AbstractProcessor.parseHost()
Product: Tomcat 9
Version: 9.0.7
Hardware: PC
OS: Linux
Status: NEW
Severity: normal
Priority: P2
Component: Catalina
Assignee: [email protected]
Reporter: [email protected]
Target Milestone: -----
It now sends 400 code without any traces in logs of what is the source of the
problem. In my case it was quite hard to trace the issue. I had:
java.lang.IllegalArgumentException: The character [_] is never valid in a
domain name.
at
org.apache.tomcat.util.http.parser.HttpParser$DomainParseState.next(HttpParser.java:781)
at
org.apache.tomcat.util.http.parser.HttpParser.readHostDomainName(HttpParser.java:673)
at org.apache.tomcat.util.http.parser.Host.parse(Host.java:66)
at org.apache.tomcat.util.http.parser.Host.parse(Host.java:40)
at
org.apache.coyote.AbstractProcessor.parseHost(AbstractProcessor.java:269)
at
org.apache.coyote.http11.Http11Processor.prepareRequest(Http11Processor.java:760)
at
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:383)
at
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:754)
at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1376)
at
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:844)
I spend lots of time trying to debug the issue I had.
If you need more info on config - I have:
Apache 2.4 -> ProxyPass ajp -> tomcat (java 10)
-> ProxyPass websocket (http11) -> tomcat (same)
All this runs as docker containers so in Apache config I connect to tomcat
using name "default_tomcat_1" - given by docker (compose). As a result after
upgrading from tomcat 7.0.56 to 9.0.7 I have all websocket requests just
failing with code 400. After debugging tomcat I understand that websocket
requests go via Http11Processor and fail cause it receives this
"default_tomcat_1" as host name from Apache. At the same time other requests
routed via AJP are working fine cause they've got Apache public IP as "host".
On apache config:
ProxyPass /websocket ws://default_tomcat_1:8080/websocket retry=0
ProxyPassReverse /websocket ws://default_tomcat_1:8080/websocket
ProxyPass / ajp://default_tomcat_1:8009/ retry=0
ProxyPassReverse / ajp://default_tomcat_1:8009/
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]