程序里查看Web服务器类型,最直接的办法是看HTTP响应头中的Server字段,一条curl命令就能确认;如果没有响应头,再通过本地进程、配置文件或运维面板来锁定。
做Web开发或者排查线上问题的时候,经常需要确认程序跑在什么服务器上,这里的“程序”可能是你自己写的一段脚本,也可能是一个完整的网站项目,多数人对业务代码很熟,但到了服务器这一层,反而容易两眼一摸黑,其实识别Web服务器这件事,在程序里就能办到,不需要登录机器,也不需要问运维。
怎么看网站服务器类型,先看响应头
HTTP协议里有个约定,服务器返回内容的时候,会顺带返回一组响应头,其中Server字段专门用来声明服务器软件的名字,你只需要把这段HTTP响应头抓出来,基本上就能知道答案。
最常用的抓取工具是curl,在Linux、macOS、Windows 10以上的终端里都自带,不需要安装额外软件,打开终端输入:
curl -I https://你的域名
其中-I参数表示只获取响应头,不下载页面内容,执行之后,返回信息的第一段就包含Server字段。
举个例子,返回内容长这样:
HTTP/2 200
server: nginx
date: ...
content-type: text/html
看到nginx三个字母,就能确定是Nginx,如果返回的是Apache,那么代码里对应的是阿帕奇;如果返回Microsoft-IIS/10.0,那说明程序跑在Windows Server的IIS上。
响应头带版本号时怎么拆解
很多服务器出于兼容性考虑不会隐藏版本号,例如nginx/1.18.0、Apache/2.4.41 (Ubuntu)、Microsoft-IIS/8.5,这些字符串里包含着重要信息:软件名、主版本号、补丁级别,有时还附带操作系统标识,看到这类内容,直接记下即可,后续排查安全漏洞或性能问题时相当有用。
用浏览器开发者工具也能看响应头
如果你没有终端权限,或者更喜欢图形界面,那就用浏览器,打开Chrome或Edge,按F12进入开发者工具,切换到“网络”标签页,刷新页面,点击任意一个文档请求,在“响应头”面板里同样能看到Server字段,这种方式更适合前端开发人员,盯着页面就能顺手查完。
服务器标识被隐藏时怎么判断
有些网站出于安全考虑,会在Nginx配置里加一行server_tokens off;,或者在Apache里设置ServerSignature Off,这样响应头里就不带Server字段了,别慌,还有几个变通的办法。
- 看默认报错页面,Nginx的404页面风格偏简洁,Apache的403页面带有官方脚注,IIS的错误页则是一整页蓝色,特征非常明显。
- 看
X-Powered-By响应头,常见值有ASP.NET(对应IIS)、PHP/7.4(常见于Apache或Nginx的FastCGI环境)。 - 看
Set-Cookie的字段名,IIS的ASP.NET_SessionId、Nginx反代后端的JSESSIONID,都能侧面说明问题。
行业内说得直白一点,服务器软件可以藏名字,但藏不住行为习惯,默认页面、Cookie的格式、响应头顺序,这些都是固定的指纹。
本地开发环境怎么确认Web服务器类型
线上环境适合看响应头,本地开发环境有时候更简单,直接看进程就行,Windows、macOS、Linux三类系统情况略有差异,分开说。
Windows系统先看进程占用
Windows下最常见的Web服务器是IIS,但它不是唯一的可能,很多开发者会在Windows上装Apache或Nginx,打开任务管理器,切换到“详细信息”标签页,如果看到w3wp.exe进程,那基本上是IIS在工作;如果看到nginx.exe或httpd.exe,则分别对应Nginx和Apache。
用命令行更保险,打开cmd或PowerShell,执行:
netstat -ano | findstr :80
这会列出占用80端口的进程ID,然后执行:
tasklist /fi "pid eq 进程ID"
就能看到具体的程序名,这个方法在Windows 11和Windows Server上都能用。
Linux服务器用这几条命令直接读出结果
在Linux服务器上,优先检查进程列表,输入:
ps aux | grep -E 'nginx|apache|httpd'
只看你输入的那一行,如果出现nginx: worker process,那显然就是Nginx;如果出现/usr/sbin/apache2或者/usr/sbin/httpd,那就是Apache,更规范的做法是用systemctl查看服务状态:
systemctl status nginx systemctl status httpd systemctl status apache2
哪条命令返回了active (running),对应的就是当前使用的服务器。
还有一种情况:程序本身监听在8080或8443端口,Web服务器以反向代理的方式转发请求,这种情况下,用ss -tlnp查看端口监听情况也不会错。
宝塔面板怎么看web服务器
国内用宝塔面板的开发者数量相当大,宝塔把复杂的配置集成成了图形界面,在左侧菜单点“网站”,选择目标站点,进入“设置”,然后找到“配置文件”选项卡,顶部就有server指令;用Nginx建的站,配置文件里写的是listen 80加server_name,更方便的办法是看“软件商店”页面,已安装的Web服务会直接列出来,Nginx或Apache旁边会显示版本号,面板里一眼就能看到,不需要敲命令。
三种主流Web服务器识别特征对比
做运维排查时,需要快速区分Nginx、Apache和IIS,如果只看响应头还不够,可以根据下表组合判断。
| 维度 | Nginx | Apache | IIS |
|---|---|---|---|
| 默认端口 | 80/443 | 80/443 | 80/443 |
| 默认欢迎页 | “Welcome to nginx!” 红底黑字 | 白底“It works!” | 蓝色“Windows Server”欢迎页 |
| 响应头样式 | Server: nginx |
Server: Apache |
Server: Microsoft-IIS/10.0 |
| 配置文件 | /etc/nginx/nginx.conf |
/etc/httpd/conf/httpd.conf |
没有传统配置文件,使用图形管理 |
| 错误页特征 | 简洁干净,无边框 | 页脚有版本信息 | 蓝色页面,代码错误号明显 |
| 安装包大小 | 极小,通常不到1MB | 相对较大 | 随系统集成,不可单独下载 |
国内云服务器厂商在镜像市场里预装了不同组合,简米云、酷番云、百度智能云的公共镜像,多数默认安装了Nginx或Apache,购买时能看到镜像说明里写着“LNMP环境”或者“LAMP环境”,如果你用云厂商的WordPress一键部署,后台插件列表里经常能间接看到Web服务器的名字,因为部分插件要求填写服务器类型,安装时自动检测的结果往往就是最佳答案。
怎么查看Web服务器软件版本
知道服务器类型之后,版本信息同样重要,Nginx 1.18和Nginx 1.25的配置指令差别不大,但安全性和性能特性差距明显,Apache 2.2和Apache 2.4更是跨了大版本,配置语法有实质差异。
线上查看版本号的几个位置
响应头里如果版本号被隐藏,就换个思路,访问一个不存在的路径,触发404或403错误页,Apache在ServerSignature没有完全关闭时,错误页底部会显示Apache/2.4.41 (Ubuntu) Server at 你的域名 Port 80字样,Nginx关闭版本号后很难从线上直接读出精确版本,但可以通过X-Powered-By或者后端语言的特征来推测大致年份的版本趋势。
更实用的办法是结合CDN特征来判断,国内网站现在普遍套了酷番云EdgeOne、简米云CDN或Cloudflare,这时候响应头的Server字段显示的是CDN厂商的名称而不是源站的服务器软件,碰到这种情况,用curl直接打源站IP,绕过CDN才能拿到真实信息。
本地查询版本的命令清单
服务器本机上有绝对的话语权,直接敲命令看版本。
nginx -v nginx -V apache2 -v httpd -v
nginx -v只输出版本号,nginx -V则顺便输出编译参数,能看到它用了哪些模块,Apache的-v参数同样输出版本和编译时间,还附带Server built信息,IIS没有命令行版本的直接入口,但可以在“服务器管理器”里的“角色和功能”页面里看到版本号,或者在IIS管理器的“帮助”菜单里查看具体版本。
如果你用的是Docker容器,进入容器内部同样执行这些命令
docker exec -it 容器名 nginx -v
程序里的代码层面也能读取,例如PHP的phpinfo()页面会显示SERVER_SOFTWARE字段,Python的Flask或Django框架可以通过request.environ.get('SERVER_SOFTWARE')获取,这些方法都返回同一个答案,就是当前Web服务器软件的名字和版本。
另外提醒一句,Nginx从1.25.0开始将nginx -v的输出去向改了,从标准输出变成了标准错误,使用脚本解析时记得把2>&1加上。
程序里查看Web服务器是基本功
线上排查时,最怕的就是连自己服务的底座是什么都不知道,看响应头、看进程、看配置文件,三步走完,服务器类型就不会再有疑问,这套方法论适用于Nginx、Apache、IIS,也适用于各种自研网关,掌握了这个技能,比记住任何现成的监控面板都更实在,因为回到命令行,你才是那个能真正解决问题的人。
Q&A:怎么查看Web服务器软件版本?
问:怎么看网站用的什么服务器?
使用curl -I或浏览器开发者工具查看HTTP响应头中的Server字段,若字段为空,则访问不存在的路径查看404错误页,或查看默认欢迎页的特征来辅助判断。
问:Linux查看web服务器类型命令有哪些?
常用三条:ps aux | grep -E 'nginx|apache|httpd'查看进程名,systemctl status nginx查看服务状态,ss -tlnp查看端口监听对应的进程,如果安装了宝塔面板,也可以在软件商店页面直接看到。
问:响应头里的Server字段显示cloudflare是什么意思?
说明流量经过了Cloudflare的CDN节点,当前响应的Server字段来自CDN而非源站,验证方法就是跳过CDN直接解析源站IP,或者访问源站时修改Host头再抓一次响应头,才能看到真正的Web服务器类型。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/783972.html

