使用firewalld配置防火墙规则
海外云服务器 40个地区可选 亚太云服务器 香港 日本 韩国
云虚拟主机 个人和企业网站的理想选择 俄罗斯电商外贸虚拟主机 赠送SSL证书
在当今高度分布式的Web服务架构中,Apache HTTP Server 作为最成熟、最广泛使用的开源Web服务器之一,凭借其卓越的稳定性、灵活的模块化设计和强大的虚拟主机功能,持续为全球数百万网站提供坚实支撑。“虚拟主机(Virtual Host)”机制允许我们在单台物理或虚拟服务器上托管多个独立站点;而“端口定制化配置”则进一步扩展了服务隔离性、安全性和灵活性。
本文将系统性地讲解如何在Apache中配置基于不同端口号的虚拟主机,从基础概念到实战部署,再到排错调试,助你轻松构建“一机多站、多端并行”的高效服务架构。
什么是虚拟主机?为何要结合端口号使用?
虚拟主机简述
虚拟主机(Virtual Host),顾名思义,是指在同一台服务器硬件资源上,通过域名、IP地址或端口号的不同组合,运行多个彼此独立的网站应用,Apache支持两种主流模式:
- 基于名称的虚拟主机(Name-based Virtual Host):通过
ServerName区分站点,适用于共享同一IP的情况。 - 基于IP的虚拟主机(IP-based Virtual Host):通过绑定不同IP地址实现隔离,适合拥有多个公网IP的环境。
无论哪种模式,均可叠加“端口维度”,实现更精细的服务划分——即“基于端口的虚拟主机”。
为什么要指定不同的端口号?
-
环境隔离
将开发、测试、预发布环境部署于不同端口(如8080、8081),避免相互干扰,便于并行调试。 -
规避端口冲突
当服务器需同时运行Nginx、Node.js、Tomcat等其他服务时,自定义端口能有效防止默认80/443被占用。 -
提升安全性
非标准端口(如8080、8443、9000等)不易被自动化脚本扫描攻击,可作为轻量级“隐蔽层”,降低暴露风险。 -
特殊用途服务部署
如内部管理后台、API网关、监控面板等,可通过专属端口对外提供受限访问。
实战演练:配置两个站点分别监听8080与8081端口
假设目标:
site1.example.com→ 监听端口8080site2.example.com→ 监听端口8081- 站点根目录分别为
/var/www/site1和/var/www/site2
第一步:确认Apache已启用虚拟主机模块
编辑主配置文件(路径因发行版而异):
- Ubuntu/Debian:
/etc/apache2/apache2.conf - CentOS/RHEL:
/etc/httpd/conf/httpd.conf
确保以下模块已加载(取消注释或添加):
LoadModule vhost_alias_module modules/mod_vhost_alias.so LoadModule rewrite_module modules/mod_rewrite.so # 可选,用于重写规则
💡 提示:部分系统默认已启用,可通过
apache2ctl -M | grep vhost或httpd -M | grep vhost验证。
第二步:声明监听端口
在端口配置文件中新增监听指令:
- Ubuntu/Debian: 编辑
/etc/apache2/ports.conf - CentOS/RHEL: 在
httpd.conf中直接追加
Listen 8080 Listen 8081
⚠️ 注意:若启用了SSL,还需对应配置
Listen 8443并设置<VirtualHost *:8443>。
第三步:创建并配置虚拟主机文件
创建站点配置文件
推荐将每个站点独立成 .conf 文件存放于 sites-available/ 目录:
sudo nano /etc/apache2/sites-available/site1.conf
如下:
<VirtualHost *:8080>
ServerName site1.example.com
ServerAlias www.site1.example.com
DocumentRoot /var/www/site1
<Directory /var/www/site1>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
# 日志配置
ErrorLog ${APACHE_LOG_DIR}/site1_error.log
CustomLog ${APACHE_LOG_DIR}/site1_access.log combined
# 可选:启用压缩、缓存等性能优化
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript
</IfModule>
</VirtualHost>
同理,创建 site2.conf:
<VirtualHost *:8081>
ServerName site2.example.com
ServerAlias www.site2.example.com
DocumentRoot /var/www/site2
<Directory /var/www/site2>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/site2_error.log
CustomLog ${APACHE_LOG_DIR}/site2_access.log combined
</VirtualHost>
第四步:启用站点并重启服务
Ubuntu/Debian 用户执行:
sudo a2ensite site1.conf sudo a2ensite site2.conf sudo systemctl reload apache2 # 推荐先reload,无误后再restart # 或 sudo systemctl restart apache2
CentOS/RHEL 用户需手动软链接或复制至 conf.d/:
sudo ln -s /etc/httpd/sites-available/site1.conf /etc/httpd/conf.d/ sudo ln -s /etc/httpd/sites-available/site2.conf /etc/httpd/conf.d/ sudo systemctl restart httpd
第五步:配置防火墙开放端口
根据系统选择命令:
Ubuntu(UFW):
sudo ufw allow 8080/tcp sudo ufw allow 8081/tcp sudo ufw reload
CentOS/RHEL(firewalld):
sudo firewall-cmd --permanent --add-port=8080/tcp sudo firewall-cmd --permanent --add-port=8081/tcp sudo firewall-cmd --reload
📌 若使用云服务器(如阿里云、AWS),还需在控制台安全组中放行对应端口!
第六步:测试访问
在浏览器或终端中访问:
http://your-server-ip:8080
http://your-server-ip:8081
应分别看到各自站点首页内容,建议配合本地 hosts 文件临时解析域名进行测试:
168.1.100 site1.example.com 192.168.1.100 site2.example.com
常见问题排查与调试技巧
遇到无法访问?请按以下步骤逐一检查:
检查SELinux策略(仅限CentOS/RHEL)
非标准HTTP端口可能被SELinux拦截:
# 查看当前允许的HTTP端口 sudo semanage port -l | grep http # 添加新端口到HTTP策略 sudo semanage port -a -t http_port_t -p tcp 8080 sudo semanage port -a -t http_port_t -p tcp 8081 # 验证是否添加成功 sudo semanage port -l | grep http_port_t
若未安装
semanage,请先执行:sudo yum install policycoreutils-python-utils
语法检测与错误日志
# 检查Apache配置语法 sudo apache2ctl configtest # Ubuntu sudo httpd -t # CentOS # 实时查看错误日志 sudo tail -f /var/log/apache2/error.log # Ubuntu sudo tail -f /var/log/httpd/error_log # CentOS
端口监听状态验证
sudo netstat -tuln | grep ':8080\|:8081' # 或 sudo ss -tuln | grep ':8080\|:8081'
确保Apache进程确实在监听目标端口。
进阶建议与最佳实践
✅ 命名规范:虚拟主机文件建议以“域名_端口.conf”命名,如 site1_8080.conf,便于后期维护。
✅ 权限控制:确保DocumentRoot目录权限


