本地端口访问可用,但nginx反向代理400错误、Tomcat “The character [_] is never valid in a domain name

在使用 Tomcat 作为后端服务时,nginx反向代理给本地服务器的某个端口,遇到一个关于域名解析的错误,并且外网访问报404错误:

java.lang.IllegalArgumentException: The character [_] is never valid in a domain name.

问题背景

在项目部署过程中,我设置了 Nginx 作为反向代理,将请求转发给 Tomcat 服务器。本地访问后端端口成功,但通过域名访问时却报错 400 Bad Request。检查 Tomcat 日志后,发现了上面的异常。

问题原因

根据 RFC 1035,域名的合法字符为:

  1. 小写字母(a-z)
  2. 数字(0-9)
  3. 连字符 -(但不能出现在域名开头或结尾)
    而下划线 _ 并不是合法的域名字符。我原本的域名配置为 www.xxx_abc.xxxx.cn,其中的下划线导致 Tomcat 解析 Host 头信息时抛出了 IllegalArgumentException,因为域名不符合规范。

解决方法

不使用下划线。

总结

这次错误的根本原因是域名中使用了非法字符 _,导致 Tomcat 无法解析 Host 头。解决方法是确保域名符合法规,避免使用下划线。如果你遇到类似的域名解析问题,优先检查域名是否合法,尤其是在使用 Nginx 反向代理时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值