Linux Apache配置虚拟主机命令详解
海外云服务器 40个地区可选 亚太云服务器 香港 日本 韩国
云虚拟主机 个人和企业网站的理想选择 俄罗斯电商外贸虚拟主机 赠送SSL证书
在现代Web服务器管理中,Apache作为全球最广泛使用的开源HTTP服务器软件之一,凭借其稳定性、灵活性和丰富的功能模块,长期占据着主导地位,尤其在各类Linux发行版中,Apache(httpd 或 apache2)已成为部署静态与动态网站的核心组件。
通过配置虚拟主机(Virtual Host),管理员可以在一台物理服务器上同时运行多个独立站点,每个站点拥有专属的域名、文档根目录、访问日志以及安全策略,从而实现资源的最大化利用与精细化管理,本文将详细介绍如何在主流Linux系统(CentOS与Ubuntu)中基于Apache配置虚拟主机,涵盖安装、目录结构设计、配置文件编写、服务启用及常见问题排查等完整流程。
准备工作:安装并启动Apache服务
在开始配置之前,请确保您的系统已连接网络并具备管理员权限,根据不同的Linux发行版,使用对应的包管理器安装Apache。
对于 CentOS/RHEL 系统:
sudo yum install httpd -y
说明:若您使用的是较新版本的CentOS Stream或RHEL 8+,建议使用
dnf替代yum:sudo dnf install httpd -y
对于 Ubuntu/Debian 系统:
sudo apt update && sudo apt install apache2 -y
安装完成后,启动服务并设置开机自启:
在 Ubuntu 上:
sudo systemctl start apache2 sudo systemctl enable apache2
在 CentOS 上:
sudo systemctl start httpd sudo systemctl enable httpd
验证服务状态是否正常运行:
sudo systemctl status apache2 # Ubuntu # 或 sudo systemctl status httpd # CentOS
确认无误后,可通过浏览器访问服务器的IP地址(如 http://your_server_ip),应能看到Apache默认欢迎页面,表示服务已成功启动。
创建网站目录结构
为保证各站点之间的隔离性与可维护性,推荐为每个虚拟主机创建独立的目录结构。
我们以两个示例域名为例:site1.example.com 和 site2.example.com。
执行以下命令创建相应的目录层级:
sudo mkdir -p /var/www/site1.example.com/html sudo mkdir -p /var/www/site2.example.com/html
在各自目录下创建简单的测试页面用于后续验证:
echo "<h1>欢迎访问 site1.example.com</h1>" | sudo tee /var/www/site1.example.com/html/index.html echo "<h1>欢迎访问 site2.example.com</h1>" | sudo tee /var/www/site2.example.com/html/index.html
设置正确的文件所有权和访问权限,确保Web服务器进程(通常是 www-data 或 apache 用户)可以读取内容:
# Ubuntu(用户组通常为 www-data) sudo chown -R $USER:www-data /var/www/site1.example.com/html sudo chown -R $USER:www-data /var/www/site2.example.com/html # CentOS(用户组通常为 apache) sudo chown -R $USER:apache /var/www/site1.example.com/html sudo chown -R $USER:apache /var/www/site2.example.com/html # 设置统一目录权限 sudo chmod -R 755 /var/www
安全提示:生产环境中应避免过度开放权限,建议对上传目录单独限制执行权限,防止恶意脚本注入。
配置虚拟主机文件
Apache支持基于名称的虚拟主机(Name-based Virtual Hosting),即通过不同域名指向同一IP地址来区分多个站点,配置方式因操作系统而异。
Ubuntu 系统配置示例
Ubuntu 使用 sites-available 和 sites-enabled 目录分离“可用”与“启用”的站点配置。
-
创建虚拟主机配置文件:
sudo nano /etc/apache2/sites-available/site1.example.com.conf
-
添加如下配置内容:
<VirtualHost *:80> ServerName site1.example.com DocumentRoot /var/www/site1.example.com/html ErrorLog ${APACHE_LOG_DIR}/site1_error.log CustomLog ${APACHE_LOG_DIR}/site1_access.log combined # 可选:设置目录权限 <Directory /var/www/site1.example.com/html> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> </VirtualHost> -
同样地,创建
site2.example.com.conf文件,仅需替换域名与路径即可。 -
启用站点配置:
sudo a2ensite site1.example.com.conf sudo a2ensite site2.example.com.conf
-
(可选)禁用默认站点以避免冲突:
sudo a2dissite 000-default.conf
-
重新加载Apache服务使配置生效:
sudo systemctl reload apache2
CentOS 系统配置示例
CentOS 中的虚拟主机通常直接存放在 /etc/httpd/conf.d/ 目录下,所有 .conf 文件都会被自动加载。
-
创建配置文件:
sudo nano /etc/httpd/conf.d/site1.example.com.conf
-
<VirtualHost *:80> ServerName site1.example.com DocumentRoot /var/www/site1.example.com/html ErrorLog /var/log/httpd/site1_error.log CustomLog /var/log/httpd/site1_access.log combined <Directory "/var/www/site1.example.com/html"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> </VirtualHost> -
创建第二个站点配置文件
site2.example.com.conf,修改对应参数。 -
完成后重启Apache服务:
sudo systemctl restart httpd
注意:CentOS默认SELinux可能影响文件访问,若遇到权限拒绝错误,可临时查看SELinux状态:
sestatus若开启,需调整上下文标签:
sudo setsebool -P httpd_read_user_content 1 sudo chcon -R -t httpd_sys_content_t /var/www/
本地测试与DNS模拟配置
如果尚未注册真实域名或未配置公网DNS,可通过修改本地 hosts 文件实现域名映射,便于测试。
编辑本机 hosts 文件:
sudo nano /etc/hosts
添加如下行(假设服务器IP为本地回环或内网地址):
0.0.1 site1.example.com
127.0.0.1 site2.example.com
保存后,在浏览器中分别访问:
http://site1.example.comhttp://site2.example.com
若能正确显示各自的测试页面,则说明虚拟主机配置成功。
扩展建议:对于团队开发环境,可在局域网路由器或内部DNS服务器中配置私有域名解析,提升协作效率。
常见问题排查与维护技巧
即使配置看似正确,仍可能出现无法访问的情况,以下是常用的诊断方法:
| 问题类型 | 解决方案 |
|---|---|
| 配置语法错误 | 检查配置文件是否有拼写或格式错误:sudo apache2ctl configtest (Ubuntu)sudo httpd -t (CentOS) |
| 访问日志分析 | 查看实时访问与错误日志:tail -f /var/log/apache2/access.logtail -f /var/log/httpd/error_log |
| 防火墙拦截 | 确保HTTP端口(80)已放行: Ubuntu: sudo ufw allow 'Apache'CentOS: sudo firewall-cmd --permanent --add-service=http && sudo firewall-cmd --reload |
| SELinux 阻止访问(仅CentOS) | 使用 audit2why 分析拒绝原因,或临时设为宽容模式测试:sudo setenforce 0 |
| 权限不足 | 检查目录归属是否正确,确保Apache用户有读取权限:ls -l /var/www/ |
定期清理日志文件、监控磁盘空间、启用压缩与缓存模块(如 mod_deflate, mod_expires)也是保障性能的重要措施。
总结与进阶方向
通过


