Linux 服务已启动却访问失败:用 ss 和 curl 分层定位

举报
yd_271400591 发表于 2026/11/09 22:59:29 2026/11/09
【摘要】 用 ss 检查监听地址与端口,用 curl 验证 HTTP 响应,再逐层检查外部链路。附仅监听回环地址的 Python 静态服务样例与排查命令,帮助区分进程运行、端口监听和业务可用。

Linux 服务已启动却访问失败:用 ss 和 curl 分层定位

进程存在,只能说明程序还在运行。浏览器能否访问服务,还取决于监听地址、端口、HTTP 响应和网络路径。排查时按“本机应用 → 监听接口 → 外部链路”的顺序收集证据,可以减少反复重启和盲目修改配置。

先建立一个可控的本机样例

下面的示例只监听回环地址,适合在自己电脑或服务器上练习。Python 3 已安装时,在终端执行:

mkdir -p /tmp/http-check-demo
printf 'service-ok\n' > /tmp/http-check-demo/index.html
python3 -m http.server 8000 --bind 127.0.0.1 --directory /tmp/http-check-demo

保持终端运行,另开一个终端检查。示例目录只放演示文件,避免将工作目录中的其他内容一起作为静态文件提供。

第一步:确认端口由谁监听

ss -lntp 'sport = :8000'

-l 查看监听套接字,-n 使用数字地址和端口,-t 只看 TCP,-p 显示进程信息。查看其他用户的进程详情可能需要额外权限,但监听地址仍然是首要证据。

示例应出现 127.0.0.1:8000。这意味着只有本机可以连接;外部访问失败符合当前配置。若显示 0.0.0.0:8000,表示监听全部 IPv4 接口;[::]:8000 涉及 IPv6,是否同时接收 IPv4 还要结合系统和应用设置判断。没有记录时,应先核对实际端口、启动参数与应用日志。

第二步:验证应用是否返回 HTTP 响应

curl --noproxy '*' --connect-timeout 3 --max-time 5 -i http://127.0.0.1:8000/

这里使用 GET 请求,同时展示响应头和正文。预期结果是状态码 200,正文含 service-ok。--noproxy '*' 避免环境中的代理配置干扰本机验证;两个超时参数让连接失败或响应挂起尽快显现。

如果返回 404,至少说明已连接到某个 HTTP 服务,应继续检查路径和服务目录。Connection refused 通常表示连接遭拒,应检查监听进程、地址和端口;超时则需要继续区分路由、过滤规则以及应用是否迟迟未响应。

第三步:本机通过后再检查外部链路

实际部署时,先确认服务确实计划对外提供访问,再核对监听接口、主机防火墙、云安全组、负载均衡和域名解析。优先从另一台机器访问明确的地址和端口,减少域名、HTTPS 和反向代理同时介入带来的变量。只调整与目标服务相关的访问规则。

若直连正常而域名访问异常,再核对解析结果、代理转发目标和证书配置。HTTP 状态码反映应用层结果,TCP 能连通并不保证业务请求成功。

留下一条可复核的排查记录

记录检查时间、目标地址、监听结果、请求命令和响应状态,比“重启后好了”更便于复盘。测试结束后,在运行 Python 服务的终端按 Ctrl+C 停止它。上述输出均为样例的预期结果;在真实环境中,应以实际命令输出为依据。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。