在Apache服务器配置中,虚拟主机是一项核心功能,它允许在同一台服务器上托管多个独立的网站,默认情况下,大多数网站使用80端口(HTTP)和443端口(HTTPS)进行通信,在某些场景下,如开发环境隔离、测试特定服务或避免端口冲突,我们可能需要为虚拟主机配置非80端口,本文将详细介绍如何在Apache中配置非80端口的虚拟主机,包括环境准备、配置步骤、常见问题及解决方案。

环境准备与前提条件
在开始配置之前,确保以下条件已满足:
- Apache服务器已安装:以Ubuntu/Debian系统为例,可通过
sudo apt install apache2命令安装;CentOS/RHEL系统则使用sudo yum install httpd。 - 管理员权限:配置文件修改需要root或sudo权限。
- 端口未被占用:使用
netstat -tuln | grep 端口号或ss -tuln | grep 端口号检查目标端口是否空闲,例如8080、8081等。 - 防火墙规则:确保防火墙(如ufw、firewalld或iptables)允许目标端口的访问,例如
sudo ufw allow 8080。
虚拟主机配置步骤
创建虚拟主机配置文件
Apache的虚拟主机配置通常存储在/etc/apache2/sites-available/(Ubuntu/Debian)或/etc/httpd/conf.d/(CentOS/RHEL)目录下,为每个虚拟主机创建独立的配置文件,便于管理,为域名example.com创建配置文件/etc/apache2/sites-available/example.com.conf:
<VirtualHost *:8080>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
<Directory /var/www/example.com/public_html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
</VirtualHost>关键参数说明:
*:8080:监听所有网络接口的8080端口,可替换为具体IP(如168.1.100:8080)。ServerName:主域名,ServerAlias:附加域名。DocumentRoot:网站根目录,需提前创建并设置权限(sudo mkdir -p /var/www/example.com/public_html && sudo chown -R www-data:www-data /var/www/example.com/public_html)。
启用虚拟主机
在Ubuntu/Debian中,使用a2ensite命令启用配置文件:
sudo a2ensite example.com.conf
在CentOS/RHEL中,确保文件以.conf结尾且位于/etc/httpd/conf.d/目录,Apache会自动加载。
修改Apache主配置(可选)
如果需要限制Apache仅监听特定端口,可编辑主配置文件/etc/apache2/apache2.conf或/etc/httpd/conf/httpd.conf,添加或修改Listen指令:

Listen 8080
若需同时保留80端口,可添加多行Listen指令,如Listen 80和Listen 8080。
重启Apache服务
保存配置后,重启Apache使配置生效:
sudo systemctl restart apache2 # Ubuntu/Debian sudo systemctl restart httpd # CentOS/RHEL
验证配置与访问测试
- 检查配置语法:运行
sudo apache2ctl configtest(Ubuntu/Debian)或sudo apachectl configtest(CentOS/RHEL),确保输出Syntax OK。 - 通过浏览器访问:在浏览器地址栏输入
http://example.com:8080,若显示网站内容则配置成功。 - 使用curl命令测试:
curl -I http://example.com:8080
检查响应头是否包含
HTTP/1.1 200 OK。
常见问题与解决方案
端口冲突
现象:启动Apache时报错Address already in use。
解决:更换其他端口(如8081),或终止占用端口的进程(sudo lsof -ti:8080 | xargs kill -9)。
防火墙阻止访问
现象:本地访问正常,远程无法访问。
解决:检查防火墙规则,
- Ubuntu/Debian(ufw):
sudo ufw allow 8080 - CentOS/RHEL(firewalld):
sudo firewall-cmd --permanent --add-port=8080/tcp && sudo firewall-cmd --reload
权限问题
现象:访问页面时出现403 Forbidden。
解决:检查DocumentRoot目录权限,确保Apache运行用户(如www-data)有读取和执行权限:

sudo chown -R www-data:www-data /var/www/example.com/public_html sudo chmod -R 755 /var/www/example.com/public_html
域名解析问题
现象:使用域名无法访问,但IP加端口可以。
解决:确保域名DNS解析指向服务器IP,或修改本地hosts文件(sudo nano /etc/hosts),添加:
服务器IP example.com高级配置:基于IP和端口的虚拟主机
若服务器有多个IP地址,可配置基于IP和端口的虚拟主机,为IP168.1.100的8080端口创建主机:
<VirtualHost 192.168.1.100:8080>
ServerName example.com
DocumentRoot /var/www/example.com/public_html
# 其他配置...
</VirtualHost>
<VirtualHost 192.168.1.101:8080>
ServerName test.com
DocumentRoot /var/www/test.com/public_html
# 其他配置...
</VirtualHost>安全配置建议
- 使用HTTPS:即使是非80端口,也建议启用SSL加密,可通过Let’s Encrypt免费获取证书,配置443端口虚拟主机。
- 限制访问:通过
Require ip指令限制特定IP访问,<RequireAll> Require ip 192.168.1.0/24 Require all denied </RequireAll> - 隐藏版本信息:编辑
apache2.conf或httpd.conf,设置ServerTokens Prod和ServerSignature Off,减少信息泄露。
配置Apache虚拟主机的非80端口是扩展服务器功能、实现多网站隔离的有效方法,关键步骤包括创建配置文件、指定监听端口、启用站点并确保防火墙和权限设置正确,通过合理的规划和安全配置,可以灵活满足不同场景下的托管需求,在实际操作中,建议先在测试环境验证配置,确保无误后再部署到生产环境。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/38746.html
