在使用XAMPP进行本地开发时,很多场景下需要同时运行多个不同的项目,比如同时开发两个独立的Web应用,或者同时部署测试版和正式版项目。如果只使用默认的80端口,不同项目只能通过子路径区分,容易出现静态资源路径冲突、配置互相覆盖的问题。通过配置XAMPP的多端口,让每个项目绑定独立的访问端口,就能完美解决这类问题,实现多项目互不干扰的独立运行。
配置前的准备工作
首先确认XAMPP已经正常安装,并且Apache服务可以正常启动。打开XAMPP控制面板,启动Apache服务,在浏览器访问http://localhost,如果能看到XAMPP的默认欢迎页面,说明基础环境正常。接下来需要确定要新增的端口号,建议选择1024以上的端口,避免和系统预留端口冲突,比如可以选择8081、8082这类端口。
修改Apache主配置文件开启端口监听
Apache的主配置文件是httpd.conf,我们需要先在这个文件中添加新端口的监听规则。打开XAMPP安装目录,找到apacheconfhttpd.conf文件,用文本编辑器打开。
在文件中找到Listen 80这一行,在其下方添加需要新增的端口监听规则,比如要新增8081端口,就添加如下内容:
# 监听新增的8081端口 Listen 8081
如果还需要新增更多端口,按照同样的格式继续添加即可,比如Listen 8082。修改完成后保存文件,暂时不要重启Apache服务,还需要配置虚拟主机。
配置虚拟主机绑定端口和项目路径
虚拟主机的配置文件是httpd-vhosts.conf,位于apacheconfextra目录下。打开这个文件,我们需要为每个端口配置对应的虚拟主机规则。
首先确保文件中已经开启了虚拟主机扩展,找到# Include conf/extra/httpd-vhosts.conf这一行,去掉前面的#号,如果没有这一行可以跳过。然后在文件末尾添加如下配置:
# 配置8081端口对应的项目1
<VirtualHost *:8081>
# 指定项目的根目录,替换为你的实际项目路径
DocumentRoot "D:/xampp/htdocs/project1"
# 指定域名,本地可以用localhost
ServerName localhost
# 目录权限配置
<Directory "D:/xampp/htdocs/project1">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
# 配置8082端口对应的项目2
<VirtualHost *:8082>
DocumentRoot "D:/xampp/htdocs/project2"
ServerName localhost
<Directory "D:/xampp/htdocs/project2">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
注意把配置中的项目路径替换成你本地实际的项目存放路径,端口号要和之前在httpd.conf中监听的端口对应。
重启服务并验证配置
保存所有修改的配置文件后,回到XAMPP控制面板,先停止Apache服务,再重新启动。如果启动过程中没有报错,说明配置基本正确。
打开浏览器,分别访问http://localhost:8081和http://localhost:8082,如果能分别看到两个项目的页面,说明多端口配置成功,两个项目已经可以独立运行了。
常见错误排查
- 如果Apache启动失败,首先检查新增的端口是否被其他程序占用,可以在命令行执行
netstat -ano | findstr "8081"查看端口占用情况,如果被占用就更换其他端口。 - 如果访问端口提示403禁止访问,检查虚拟主机配置中的
Directory权限是否正确,确保Require all granted已经添加。 - 如果项目中的伪静态规则不生效,检查
AllowOverride是否设置为All,同时确保Apache的mod_rewrite模块已经开启,在httpd.conf中找到#LoadModule rewrite_module modules/mod_rewrite.so,去掉前面的#号即可。
多端口配置的扩展说明
如果需要在局域网内其他设备访问这些端口的项目,需要确保服务器防火墙已经放行对应的端口,同时访问时使用服务器的局域网IP加端口号,比如http://192.168.0.1:8081。另外如果项目需要绑定自定义域名,可以修改本地hosts文件,将自定义域名指向127.0.0.1,然后在虚拟主机配置中把ServerName改成对应的自定义域名即可。