0、问题
今天部署遇到了一个问题
使用的是 nginx/1.18.0 做的反向代理;tomcat/8.5 做的容器。
配好各种配置文件,tomcat启动成功后,打开项目主页报错如下:
java.lang.IllegalArgumentException: The character [_] is never valid in a domain name. at
org.apache.tomcat.util.http.parser.HttpParser$DomainParseState.next(HttpParser.java:946) at
org.apache.tomcat.util.http.parser.HttpParser.readHostDomainName(HttpParser.java:842) 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:277) at
org.apache.coyote.ajp.AjpProcessor.prepareRequest(AjpProcessor.java:934) at
org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:456) at
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:800) at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1471) at
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at
java.lang.Thread.run(Thread.java:745)
1、查找
我的项目域名里面有 ”_“ 居然还不行,去stackoverflow看了一下发现了问题的原因:
- Tomcat 8.5.x and later implement strict RFC-compliant hostnames as a security precaution. HTTP RFCs require host-header validation and therefore Tomcat performs that validation.
There are a trail of RFCs which require this kind of checking and define what can and cannot be in a hostname.
Your only options are to downgrade Tomcat (not recommended) or fix your hostname to be a valid domain name.
3、解决
最终我选择了去除域名中的下划线解决了该问题。