部署myServices服务后访问出现404错误,请求技术支持
我之前也碰到过类似的部署后404坑,给你梳理几个从基础到进阶的排查方向:
确认Web容器的上下文根映射
从你提到的webapps\myServices路径来看,应该是用Tomcat这类Servlet容器吧?默认情况下webapps下的子目录会自动作为上下文根,但如果手动修改过server.xml里的Host节点配置,要检查是否添加了Context标签:<Context docBase="/path/to/webapps/myServices" path="/myServices" reloadable="true"/>重点确认
docBase指向的是正确的目录,path属性和你访问的/myServices完全匹配,别出现大小写或者路径拼写错误。检查文件与目录的权限
远程服务器上的webapps/myServices目录和test.html文件,必须让容器的运行用户(比如Tomcat的tomcat用户)拥有读取权限。可以用命令查看:ls -l webapps/myServices/test.html如果权限不足,执行以下命令调整:
chmod 755 webapps/myServices chmod 644 webapps/myServices/test.html验证应用是否真的部署成功
去容器的日志目录(比如Tomcat的logs/catalina.out)搜索myServices,找类似这样的成功日志:Deployment of web application directory [/opt/tomcat/webapps/myServices] has finished in [234] ms
如果日志里有部署失败的报错(比如依赖缺失、web.xml语法错误),那应用根本没启动,自然访问404。排查端口与防火墙限制
虽然你确认了端口正确,但还要检查:- 服务器本地防火墙是否开放了目标端口,比如CentOS用
firewall-cmd --list-ports,Ubuntu用ufw status查看; - 如果是云服务器,务必检查云平台的安全组规则,是否允许外部访问该端口。有时候端口监听正常,但防火墙拦截了请求,也会返回404(部分客户端会把连接失败伪装成404)。
- 服务器本地防火墙是否开放了目标端口,比如CentOS用
先验证容器本身的可用性
先访问http://serverIp:port/,看看容器的默认欢迎页能不能打开。如果能打开,说明容器运行正常,问题集中在myServices的部署上;如果也打不开,那可能容器本身没启动,或者端口配置有误。检查静态资源的拦截规则
如果你的myServices里有自定义的web.xml,看看有没有配置拦截所有请求的Servlet或过滤器(比如<url-pattern>/*</url-pattern>),这类规则会把静态资源的请求也拦截掉。如果有,需要添加静态资源的放行配置,比如在Spring Boot里用resources标签,或者在传统Web应用里配置默认的静态资源映射。
内容的提问来源于stack exchange,提问作者Rahman

