XAMPP是Windows和Linux上都很流行的集成环境,装好之后Apache默认只监听80端口,所有项目都挤在一个入口下面。实际开发中经常遇到这样的需求:一个项目挂在8080,另一个测试站点挂在8081,管理页面还希望只允许公司内网的几台机器访问。这些需求都可以通过修改Apache配置文件来实现,XAMPP本身对httpd.conf和httpd-xampp.conf做了适度封装,改起来并不复杂,关键是理解端口监听、虚拟主机和访问控制这三层配置之间的关系。

一、为Apache添加多个监听端口
Apache要在外部某个端口上提供服务,第一步必须在配置里声明监听。打开XAMPP安装目录下的配置文件,Windows环境通常是C:\xampp\apache\conf\httpd.conf,Linux环境则是/opt/lampp/etc/httpd.conf。用文本编辑器找到Listen指令所在的区域,默认会有一行Listen 80,在其下方按需追加新的端口即可。
# 主配置文件 httpd.conf 中的监听端口配置 Listen 80 Listen 8080 Listen 8081 Listen 443
每增加一行Listen,Apache就会多绑定一个端口。需要注意的是,Listen指令还可以写成Listen 127.0.0.1:8080这种带IP的形式,表示只在本机回环地址上监听该端口,外部机器完全无法访问,适合 purely 本地调试用的服务。如果只写端口号,则默认绑定到所有网卡(0.0.0.0),局域网内其他设备都能访问到。
改完保存后,打开XAMPP控制面板重启Apache。如果启动失败,大概率是端口被占用,可以在命令行执行netstat -ano | findstr 8080(Windows)查看占用该端口的进程PID,再用任务管理器结束对应进程,或者干脆换一个端口。确认服务正常后,在浏览器访问http://localhost:8080,如果能看到页面(哪怕是默认的Dashboard),说明端口已经生效。
二、用虚拟主机把不同端口绑定到不同项目目录
仅仅监听端口还不够,多个端口如果都指向同一个根目录,就没有实际意义。真正发挥作用的是虚拟主机配置,它可以让8080端口对应项目A、8081端口对应项目B,各自拥有独立的DocumentRoot。XAMPP中虚拟主机一般写在httpd-vhosts.conf里,路径为C:\xampp\apache\conf\extra\httpd-vhosts.conf。
编辑之前要先确认主配置文件中下面这行前面的注释符号已经去掉,也就是确保vhosts配置文件被加载:
# httpd.conf 中去掉前面的 # 启用虚拟主机配置 LoadModule vhost_alias_module modules/mod_vhost_alias.so Include conf/extra/httpd-vhosts.conf
接着在httpd-vhosts.conf中为每个端口写一个VirtualHost块。注意每个块内部的端口要和外面监听的端口一致,否则请求进来后Apache找不到匹配的虚拟主机,会落到默认站点上:
<VirtualHost *:8080>
ServerName localhost
DocumentRoot "C:/xampp/htdocs/project-a"
<Directory "C:/xampp/htdocs/project-a">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:8081>
ServerName localhost
DocumentRoot "C:/xampp/htdocs/project-b"
<Directory "C:/xampp/htdocs/project-b">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
配置里的Require all granted表示允许所有来源访问,这是Apache 2.4的写法。如果你用的还是XAMPP里比较老的Apache 2.2版本,语法则是Allow from all配合Order allow,deny,两者不能混用,混用了重启时会直接报错。配置完成后重启Apache,分别访问两个端口就能看到不同项目的内容了。
三、通过白名单限制特定目录或端口的访问来源
多端口跑起来之后,安全问题就要跟上。XAMPP自带的phpMyAdmin、Dashboard等管理入口默认就有访问限制,这个逻辑写在C:\xampp\apache\conf\extra\httpd-xampp.conf里,我们可以借鉴它的写法给自己的端口加白名单。Apache 2.4使用Require ip指令控制来源IP:
<VirtualHost *:8081>
ServerName localhost
DocumentRoot "C:/xampp/htdocs/project-b"
<Directory "C:/xampp/htdocs/project-b">
Options Indexes FollowSymLinks
AllowOverride All
# 白名单:先允许本机和指定网段,再拒绝其他所有人
Require local
Require ip 192.168.1
Require ip 192.168.1.100 10.0.0.5
</Directory>
</VirtualHost>
上面几条Require ip的含义分别是:Require local匹配本机回环地址;Require ip 192.168.1写法不写完整第四段时表示整个网段,即192.168.1.0到192.168.1.255全部放行;写成完整IP则只放行单个地址。多条Require ip之间是“或”的关系,命中任意一条即允许访问,没命中的请求会收到403 Forbidden。
如果想对XAMPP自带的管理页面做白名单,直接修改httpd-xampp.conf中针对phpMyAdmin的Location块即可。另外也可以用Require not ip显式排除某个麻烦IP,但要注意Require not必须和Require all granted搭配在<RequireAll>容器里使用,否则语义会不符合预期,这是很多人配置白名单时踩过的坑。
四、验证效果与常见问题排查
配置改完不代表万事大吉,验证环节不能省。第一步看Apache能否正常启动,XAMPP控制面板里Apache前面的绿灯只表示进程活着,端口是否真的在监听要用命令确认。Windows下执行netstat -ano | findstr LISTENING | findstr 808,能看到8080和8081处于LISTENING状态就说明监听成功。第二步从局域网另一台机器访问http://你的IP:8081,如果在白名单内应正常打开,不在名单内则返回403页面,两条都符合预期才算配置完成。
排查时常见的几个问题:其一,改了配置没重启Apache,任何httpd相关文件的修改都必须重启服务才生效;其二,Windows防火墙拦截了新增端口,首次监听新端口时系统可能弹出授权提示,如果当时点了拒绝,后面就要手动去防火墙规则里放行;其三,访问返回403但确认IP在白名单里,多半是Directory块里既没写Require all granted也没写白名单,Apache 2.4对未明确授权的目录默认拒绝访问。
最后提醒一点,XAMPP定位是开发环境,默认配置并不适合直接暴露到公网。如果确实需要临时外网访问,建议只放行白名单IP、关闭Directory列表(去掉Options里的Indexes)、并给敏感目录再加一层HTTP基本认证,多重防护叠加使用才是稳妥的做法。
XAMPP多端口配置XAMPP访问白名单Apache虚拟主机修改时间:2026-09-15 17:22:38