如何在现有网站服务器上运行可正常访问的Spring Boot示例服务
问题解决步骤
首先先澄清一个核心误区:你把项目文件存放在网站的demo子目录下,只是磁盘上的文件存储位置,和Spring Boot内嵌Tomcat的服务访问路径没有任何关系,从你的启动日志看context path为空,所以所有带/demo前缀的访问路径本来就不会命中服务,不用在这上面浪费时间。
第一步:先在服务器本地验证服务可用性
先排除外网链路问题,直接在服务器命令行执行本地访问测试:
curl http://127.0.0.1:8080/greeting
- 如果这条命令拿不到预期的greeting页面内容:先执行
netstat -tulpn | grep 8080检查端口监听状态,确认8080端口是不是你的Java进程在监听,且监听地址为0.0.0.0:8080。如果监听地址是127.0.0.1:8080,说明服务只允许本机访问,需要在src/main/resources/application.properties中添加配置server.address=0.0.0.0后重启服务。 - 如果本地curl能正常返回页面内容:说明Spring Boot服务本身完全正常,问题出在网络链路、防火墙或主机商规则层面,和代码、Spring配置无关。
第二步:解决外网无法访问的核心问题
从你用的主机域名blairhippo.nfshost.com判断,你使用的是共享主机服务,这类服务默认仅开放80(HTTP)、443(HTTPS)端口对公网提供服务,8080这类自定义端口会被主机商的上层防火墙直接拦截,这是你访问无响应的核心原因。另外你测试时用https://协议加8080端口访问本身就是错误的,启动日志明确显示8080端口提供的是HTTP服务,没有配置SSL证书的前提下,HTTPS请求根本无法和服务建立连接。
可行的部署配置方案
你不需要修改现有Java业务代码,选以下任意一种方案即可:
方案1:适配共享主机环境,配置反向代理(推荐)
- 修改
src/main/resources/application.properties添加以下配置,让服务仅监听本地回环地址,避免端口暴露:server.address=127.0.0.1 server.port=8081 server.servlet.context-path=/demo - 重启Spring Boot服务,再次用本地curl验证
http://127.0.0.1:8081/demo/greeting能正常返回内容。 - 在你主机商的控制面板中配置反向代理规则,将域名下
/demo/*路径的所有请求转发到本地http://127.0.0.1:8081/demo/,配置生效后直接访问https://blairhippo.nfshost.com/demo/greeting就能正常拿到响应。
方案2:更换支持自定义端口的服务器环境
如果不想配置反向代理,可以更换为有完整权限的VPS服务器,在VPS的安全组规则、系统防火墙(ufw/firewalld)中放开8080端口的入站权限,同时给Spring Boot配置SSL证书(否则只能用HTTP访问),之后就可以直接通过http://服务器IP:8080/greeting访问服务。
额外注意事项
- 项目中只有
src/main/resources/application.properties是需要你维护的源配置文件,target/classes/路径下的配置文件是编译构建时自动复制生成的,不需要手动修改,重新执行构建命令会自动覆盖。 - 如果你不想设置context-path,也可以在反向代理规则中配置路径重写,把转发请求里的
/demo前缀去掉,两种方式选一种即可,保证路径匹配就不会出现404问题。
内容的提问来源于stack exchange,提问作者BlairHippo
相关产品推荐
相关产品推荐

