Tomcat服务
JDK/JRE信任自签CA证书
常见问题排查
Tomcat访问软链接文件提示404问题
消息:字符[_]在域名中永远无效
本文档使用 MrDoc 发布
-
+
home page
消息:字符[_]在域名中永远无效
# 问题现象 错误日志 ``` java.lang.IllegalArgumentException: 字符[_]在域名中永远无效。 ``` ![](/media/202211/2022-11-22_112542_9087830.9277618988412715.png) 使用nginx对tomcat服务进行了反向代理 部分配置如下 ``` # test-callback.netimed.cn反向配置 upstream backend_callbacksite_root { zone upstream_dynamic 64k; server test-callback.netimed.cn:8080 resolve; } ``` # 问题原因 其中server项中的地址配置对应服务为Tomcat服务 在执行访问时tomcat服务会返回400错误 出现该问题的原因是,在nginx的upstream中,反向代理会使用`backend_callbacksite_root`作为后端主机名进行访问,但tomact程序对字符`_`具有敏感性,所以导致tomcat服务无法正常解析主机,最终导致400错误 在SpringBoot项目的issue中搜索400问题,发现确实有相关的issue ``` [tomcat] Spring boot web always return 400 when use a domain name ``` 虽然看上去都是400问题,但是具体发生的原因是不一样的。这个issue是说,如果domain name .ext 包含数字,比如 "domain.sf1m",会出现400问题。这个问题也已经在tomcat的新版本中修复了。 但即使使用最新的8.5.x版本的tomcat,用带有下划线的Host的http去请求tomcat的时候依然会报400错误。 也就是说,带有下划线的Host的http请求,tomcat认为是有问题的 根据tomcat源代码提交记录显示, 2018/4/6增加了对host/port的校验。 对于带有下划线的Host,tomcat是遵循的RFC1-1034的规范的,所以tomcat的处理是正确的。 # 解决方法 修改Nginx配置,将后端代理名称中的`_`更换为`-`即可解决该问题 ``` # test-callback.netimed.cn反向配置 upstream backend-callbacksite-root { zone upstream_dynamic 64k; server test-callback.netimed.cn:8080 resolve; } ```
Nathan
Nov. 22, 2022, 11:39 a.m.
转发文档
Collection documents
Last
Next
手机扫码
Copy link
手机扫一扫转发分享
Copy link
Markdown文件
PDF文件
Docx文件
share
link
type
password
Update password