为什么我在Linux部署的Springboot服务,部署成功之后,使用netstat -ntlp | grep java 命令查看对应服务监听的端口,只看到有tcp6的监听,没有tcp的监听?
这种情况可能是由于 Spring Boot 默认配置使用了 IPv6 地址而没有使用 IPv4 地址。在较新的 Linux 发行版上,IPv6 通常是默认开启的。实际上,如果你的服务正在监听 IPv6 的通配地址 ::
,那么它将同时监听 IPv4(0.0.0.0)和 IPv6(::)的所有地址。换句话说,仅看到 tcp6 监听并不意味着服务无法处理 IPv4 连接。
在 Spring Boot 中,默认情况下,
server.address
属性没有配置。这意味着应用程序将绑定到所有可用的网络接口(IP 地址)。换句话说,当没有显式配置 server.address 时,服务器将监听所有 IPv4(0.0.0.0)和 IPv6(::)地址。如果您需要将应用程序绑定到特定的 IP 地址,您需要显式设置 server.address 属性。
要解决这个问题,你可以尝试以下方法:
-
在你的
application.properties
或application.yml
文件中设置server.address
属性,以便显式使用 IPv4 地址。例如:server.address=0.0.0.0
这将会使服务器监听所有 IPv4 和 IPv6 地址。
-
如果你仍然希望只绑定到 IPv4 地址,你可以通过设置 Java 系统属性来禁用 IPv6。可以通过添加以下选项到你的 Java 启动命令行中来完成:
-Djava.net.preferIPv4Stack=true
这将告诉 Java 虚拟机在创建新的套接字时优先使用 IPv4。
-
确保在操作系统中启用了 IPv4。这取决于你的 Linux 发行版及其配置,通常,IPv4 是默认启用的。
请注意,最好还是支持 IPv6,因为它是迈向现代网络的未来。使用第一个方法(设置 server.address
)会确保你的应用同时支持 IPv4 和 IPv6。
Linux机器的Ipv6模块被禁用。
如果你也遇到这种情况,意味着,你使用Springboot默认的方式启动服务之后,可能存在通过ipv4不能访问的情况。
如果网络中路由器禁止了ipv6的转发,那么机器监听tcp6也会导致服务不能正常访问
这时,要么对网络路由器进行配置。要么将机器本身的ipv6全部禁用。
方法:sysctl net.ipv6.conf.all.disable_ipv6=1
命令是一个系统控制(sysctl)命令,用于在 Linux 系统中完全禁用 IPv6。这个命令会配置内核参数,以在所有网络接口上禁止 IPv6。当设置为 1
时,IPv6 将被禁用;当设置为 0
时,IPv6 将被启用。
要使用此命令禁用 IPv6,请在终端中运行以下命令:
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
请注意,此命令会立即禁用 IPv6,但在系统重启后更改不会保留。
要永久禁用 IPv6,您需要编辑 /etc/sysctl.conf
文件。将以下行添加到文件末尾:
net.ipv6.conf.all.disable_ipv6=1
保存文件并退出。接下来,要加载更改,请运行以下命令:
sudo sysctl -p
现在,IPv6 已禁用且在系统重启后仍然有效。如果以后需要重新启用 IPv6,只需将值更改为 0
,然后重新加载配置即可。文章来源:https://www.toymoban.com/news/detail-738747.html
请注意,在禁用 IPv6 之前,请确保确认有关禁用 IPv6 的安全性和稳定性的潜在影响。IPv6 是为了满足互联网持续增长的需求而开发的,一些应用程序和服务可能已经开始依赖这一较新的网络协议。在这种情况下,禁用 IPv6 可能会导致连接问题或性能下降。在实施此更改之前,请确保了解所有的潜在影响。文章来源地址https://www.toymoban.com/news/detail-738747.html
到了这里,关于为什么我在Linux部署的Springboot服务,部署成功之后,使用netstat -ntlp | grep java 命令查看对应服务监听的端口,只看到有tcp6的监听,没有tcp的监听?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!