【项目部署】网页无法打开,xxx.xxx.xxx.xxx目前无法处理此请求

问题背景

这个报错发生在之前部署的一个前后端分离的项目中。后端使用的Spring Boot,前端使用的JavaScript,前后端交互使用Thymeleaf框架。

现象

现象大概是这样,项目组的小伙伴突然跟我说所有网页都打不开了,网页显示"目前无法处理此请求",如下图。

服务器上的日志是这样的:

这个异常是由一个Python定时脚本抛出的。这个脚本会定时请求服务的某个接口,请求中的url写的是公网IP。

问题排查

关于这个问题,我第一次处理,所以初步有几个猜想:

  1. 服务停止了
  2. 服务器网络断开了

服务是否停止?

在服务器上,查看java进程是否有在运行:

  • 输入jps 命令,显示有jar进程在运行
  • 输入ps -ef | grep <jar包名称> | grep -v grep,显示有进程在运行

查看java服务端口是否正在监听:

  • 输入netstat -tuln | grep <服务端口>,显示LISTEN

排查到这里,说明服务正常运行,端口也是在监听的,说明服务没有停止。

网络是否断开?

网络排查,首先就是ping:

  • 在服务器上ping百度,能ping通
  • 在本地ping服务器,能ping通

说明网络没问题。然后我尝试了telnet访问服务器的服务端口:

  • 在服务器上用公网IP + 服务端口 telnet自己的服务端口,显示telnet: Unable to connect to remote host: Connection refused
  • 在本地用公网IP + 服务端口 telnet服务器的服务端口,显示无法打开到主机的连接,连接失败
  • 在服务器上用localhost + 服务端口 或者127.0.0.1 + 服务端口 telnet自己的服务端口,能够正常连接,显示Connected to localhost.

到这里,发现只要用公网IP和端口,就访问不了。我又尝试了用curl命令访问服务,发现也是这样,只要用公网IP就访问不了,不管是在本地还是在服务器上进行访问。我很好奇,这里localhost、127.0.0.1、公网IP明明都表示同一台机器,但是只有公网IP访问不了。

查资料才发现,如果用公网IP,数据包会离开本机 ,通过网络接口传输到互联网上(即到达路由器上),然后根据路由表和网络配置在网络上传输。而如果用localhost,数据包不会离开本机,只会在计算机内部循环。

所以到这里,猜测可能是路由器的服务器端口映射变了(关于端口映射,涉及到内网、外网的概念,可以参考:什么是端口映射?路由器如何设置端口映射?),导致ping虽然能ping通,但是telnet无法访问。

最后问了服务器那边的人员,发现是网站没有备案,导致被强制关闭了外网访问。

总结

网站无法打开,从以下几个方面排查问题:

  • 网络是否正常
  • 服务是否正常启动
  • 路由器端口映射是否发生改变
  • 是否由于没有备案,导致被强制关闭外网访问

也学习到了一些计算机网络的知识:

  • ping localhost,数据包只在本机内部循环,不会到公网上
  • ping本机的公网IP,数据包会离开本机,到达路由器上,然后再根据路由器配置发送到本机
相关推荐
你我约定有三3 小时前
MyBatis--缓存详解
spring boot·缓存·mybatis
MZ_ZXD0013 小时前
springboot汽车租赁服务管理系统-计算机毕业设计源码58196
java·c++·spring boot·python·django·flask·php
Wy_编程6 小时前
Linux-文本搜索工具grep
linux·运维·服务器
qq998996 小时前
AAA服务器技术
运维·服务器
xujiangyan_6 小时前
linux的sysctl系统以及systemd系统。
linux·服务器·网络
Lovyk6 小时前
Linux Shell 常用操作与脚本示例详解
linux·运维·服务器
你的人类朋友7 小时前
说说git的变基
前端·git·后端
阿杆7 小时前
玩转 Amazon ElastiCache 免费套餐:小白也能上手
后端
泡泡龙~~7 小时前
计算机网络:2、TCP和UDP
tcp/ip·计算机网络·udp
iCan_qi7 小时前
【Mac】【Minecraft】关于如何在Mac上搭建基岩版MC服务器的方法
运维·服务器·macos·minecraft