查看Linux服务器用的什么Web服务器,最快的方法是执行 ss -tlnp 或 curl -I localhost 看返回的 Server 头信息,一步就能定位是 Nginx、Apache 还是其他软件。
很多朋友买完服务器或接手一个老项目,第一件事就是想搞清楚这台 Linux 上到底跑的是什么 Web 服务,这事听起来简单,但实际操作中经常有人把 Nginx 当 Apache 找半天,或者看到端口占用却不知道对应哪个进程,下面我用几个实际能落地的命令,帮你把这个问题彻底解决。
先分清三类常见情况再动手
在敲命令之前,你得先有个基本判断,环境不同,查看方式差别很大,尤其是很多服务器存在“反代+后端”的架构。
- 场景A:一台干净的服务器只跑一个网站,Web服务器直接对外服务。
- 场景B:服务器上有多个站点,或者用了 Nginx 做反向代理,后面挂着 Tomcat、Node.js 或者 Apache。
- 场景C:服务器上装了宝塔面板、AMH 这类可视化面板,或者用 Docker 跑的容器。
面对场景B,如果你只看进程名,很可能会看到 Nginx,但实际上真正处理动态请求的是后端的 Java 或 PHP 进程,所以下面我会按“先看结果、再追源头”的逻辑来写操作方法。
用什么命令能直接看出linux的web服务器类型
这里说的是最直接的招数,一条命令下去,答案基本就浮出水面了,首选 ss,它比老牌的 netstat 快得多,而且现在主流发行版都自带。
查看80和443端口的监听程序
执行这条命令,需要 root 权限或者使用 sudo:
sudo ss -tlnp | grep -E ':80|:443'
你会看到类似这样的输出:
LISTEN 0 511 0.0.0.0:80 0.0.0.0: users:(("nginx",pid=25841,fd=6))
LISTEN 0 128 0.0.0.0:443 0.0.0.0: users:(("nginx",pid=25841,fd=7))
看到 nginx 字样,就说明 Web 服务器是 Nginx,如果括号里是 apache2 或 httpd,那就是 Apache,如果看到 node 或其他名字,说明可能是个 Node.js 服务直接裸奔,或者监听端口被其他程序占了。
注意:如果系统提示 ss 命令找不到,用 netstat -tlnp | grep -E ':80|:443' 替代,CentOS 6 及更老版本需要先 yum install net-tools。
用 curl 命令看响应头中的 Server 字段
这条命令不需要 root 权限,在服务器本机执行即可:
curl -I http://localhost
-I 参数表示只获取响应头,看返回结果里的 Server 一行:
Server: nginx/1.18.0说明是 Nginx,版本是 1.18.0。Server: Apache/2.4.41 (Ubuntu)说明是 Apache,跑在 Ubuntu 上。- 如果返回的是
Server: openresty,说明是基于 Nginx 的 OpenResty,常见于用 Lua 做业务逻辑的场景。

这个方法比看端口更精准,因为即使前端有负载均衡器或者 CDN,你直接 curl 本机 IP 看到的就是最内层服务的真实身份。很多 CDN 会隐藏源站的 Server 头,但你在服务器本机测,看到的永远是原汁原味的。
linux查看nginx还是apache的具体操作步骤
当你确认了端口监听程序是 nginx 还是 httpd 之后,还得再验证一下,因为有时候你看到的只是一个子进程,下面这几个命令能让你确认版本的准确信息。
查看主进程PID和启动命令
先用 pgrep 找到主进程号:
pgrep -a nginx # 输出示例: 25841 nginx: master process /usr/sbin/nginx
如果输出为 nginx: master process,说明确实是 Nginx 的主进程,然后用下面的命令确认安装路径和版本:
ls -l /proc/25841/exe nginx -V
nginx -V 会输出编译参数和版本,这个信息在排查性能问题时非常有用,Apache 的话用 apache2 -V 或者 httpd -V。
查看系统服务状态确认开机自启
这一步能帮你判断 Web 服务器是不是通过 systemd 管理的:
systemctl list-units --type=service --state=running | grep -E 'nginx|apache|httpd'
看到 nginx.service 或者 apache2.service,直接说明问题,如果想看有没有设置开机自启,执行:
systemctl is-enabled nginx
输出 enabled 表示开机自启,disabled 或 static 表示需要手动启动或由其他服务触发。
检查配置文件所在目录
这是判断服务器类型最直观的佐证,不依赖进程名。
- Nginx 的配置文件通常叫
nginx.conf,站点配置放在/etc/nginx/conf.d/或/etc/nginx/sites-available/。 - Apache 的配置文件叫
httpd.conf或apache2.conf,站点配置在/etc/httpd/conf.d/或/etc/apache2/sites-available/。
执行 find /etc -name "nginx.conf" -o -name "httpd.conf",找到哪个就直接说明用了哪个。
查个web服务器软件信息遇到常见阻碍怎么解决
实际操作中,大家遇到最多的不是命令不会用,而是遇到以下这几个拦路虎:
权限不足,看不到进程PID
普通用户执行 ss -tlnp 时,users:(("nginx",pid=...)) 这部分通常会显示为 users:(("nginx",pid=...,fd=...)) 或者只显示进程名不显示 PID,这是因为查看其他用户的进程信息需要 root 权限。
解决办法:加上 sudo

,或者临时切换到 root 用户。
端口被防火墙屏蔽或 Docker 映射
如果你 curl 本机返回 503 或者连接被拒绝,但网站明明能访问,这通常是因为 Docker 容器端口映射导致的,容器内的进程和宿主机进程是隔离的,你在宿主机上执行 ss 看到的是 docker-proxy 进程,而不是真正的 Web 服务器。
解决办法:进入容器内部查看:
docker ps # 先找到容器ID docker exec -it <容器ID> /bin/bash
进入容器后再执行 ps aux | grep nginx 或 cat /etc/os-release 和 nginx -v。
同时装了 Nginx 和 Apache,但只有一个在跑
这属于比较典型的情况,有些人装了宝塔面板,里面同时装了 Nginx 和 Apache,但实际监听80端口的只有一个,此时以 ss -tlnp 的结果为准,看80端口真正在监听的那个进程,另一个只是安装了但没启动,不参与服务。
源站用了非标准端口
不排除有人故意把 Web 端口改成 8080 或 8000,这时候你应该查看所有监听端口,找 LISTEN 状态的端口,然后逐个 curl。
ss -tlnp | grep LISTEN
这条命令列出所有监听端口,然后对可疑端口执行 curl -I http://localhost:8080,看返回的 Server 头。
什么时候必须用命令行查看,什么时候用面板更快
这里说一下不同管理方式下的效率差异,方便你按自己的习惯操作。
| 管理方式 | 查看方法 | 效率 |
|---|---|---|
| 命令行SSH登录 | ss + curl + systemctl |
最快,无需额外软件 |
| 宝塔面板 | 网站界面直接显示“Nginx 1.22” | 快,但需要浏览器和账号 |
| 云厂商控制台 | 一般不显示具体Web服务,需装云监控插件 | 慢,且大多数查不到 |
| Docker环境 | docker exec 进容器查看 |
中等,需熟悉容器操作 |
行业共识认为,纯命令行方式在排查问题时永远是最底层的兜底方案,因为面板也有被误装或者版本不匹配的情况。
长期维护服务器,你应该建立这样一个习惯:每次部署完环境,用 history 回顾一下自己装了什么,用 systemctl list-units 记录服务名,否则半年后再来交接,单纯看端口猜服务,费时费力。
用一条命令同时看清Web服务器类型和当前活跃连接数
如果你想查 Web 服务器是什么,顺带还想看它忙不忙,可以用 lsof 来查:
sudo lsof -i :80 | head -20
输出第一行一般是

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME,看 COMMAND 列就能确认是 nginx 还是 apache2,后面的连接数越多,说明当前并发请求越多。
nginx -T 可以输出完整的配置文件内容,包括所有 vhost 配置,这个命令在排错时特别有用,它会校验配置语法是否正确,并输出合并后的配置,如果有语法错误,它会直接报错,不会加载。
排查Web服务器类型的完整流程总结
完整且可靠的排查顺序是:先看端口监听,再看响应头,最后查进程和配置文件圆角验证,这三步走完,基本没有搞不清的情况。
对于刚接触 Linux 的朋友,我更推荐先用 curl -I localhost 这一招,因为不需要任何权限,且输出直观,对于老手,直接 ss -tlnp | grep :80 就完事了,不同命令对应的场景不同,没有绝对的“哪条命令最好”,只有“哪条命令在当前场景下最快”。
最后记得一个常识:Nginx 的进程名一般是 nginx,Apache 在 CentOS 系叫 httpd,在 Ubuntu 系叫 apache2,如果你看到 httpd 却找不到 apache2.conf,说明你大概率用的是 CentOS,这个区分能帮你少走弯路。
关于linux查看web服务器类型的常见问题解答
问:linux查看web服务器类型,用哪条命令最准确?
最准确且不需要额外安装的,是组合使用 ss -tlnp(确认监听端口的进程名)和 curl -I localhost(解析响应头Server字段),这两条命令互补,前者告诉你什么程序在监听,后者告诉你这个程序对外声称自己是谁,如果两者结果一致,答案就是最终答案。
问:执行 netstat 命令提示没有这个命令怎么办?
netstat 属于 net-tools 工具包,较新的 Linux 发行版默认不安装,解决方法一是直接改用 ss(它属于 iproute2 包,系统已自带);二是执行 apt install net-tools(Debian/Ubuntu)或 yum install net-tools(CentOS/RHEL)补装,对于现在的生产环境,更推荐直接用 ss,因为它输出更快,且能显示更多 TCP 状态信息。
问:80端口显示被 docker-proxy 占用,如何在 linux 查看真正在跑的 web 服务器类型?
这表示请求经过了 Docker 端口映射,宿主机上的端口转发进程是 docker-proxy,并非实际 Web 服务,你需要先执行 docker ps 找到容器名称和ID,然后进入容器内部查看,使用 docker exec -it <容器名> bash 进入后,再执行 ps aux | grep -E 'nginx|apache|httpd' 或直接 curl -I localhost 即可看到容器内的 Web 服务器类型,所有以 Docker 方式部署的静态服务,其真正身份必须以容器内部信息为准,宿主机命令无法穿透容器隔离层。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/832758.html


评论列表(2条)
读了这篇文章,我深有感触。作者对查看的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!
@小萌2569:这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于查看的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!