在Linux系统中配置Apache虚拟主机,允许用户在同一台服务器上托管多个独立的网站,每个域名对应不同的网站目录,是实现资源高效利用和网站管理的重要技能,本文将以Ubuntu/Debian和CentOS/RHEL两大主流Linux发行版为例,详细讲解Apache虚拟主机的配置流程、关键步骤及注意事项。

环境准备与Apache安装
在开始配置前,需确保系统已安装Apache服务器,以Ubuntu为例,通过以下命令安装:
sudo apt update && sudo apt install apache2 -y
安装后启动Apache服务并设置开机自启:
sudo systemctl start apache2 sudo systemctl enable apache2
对于CentOS系统,需使用yum包管理器,并注意服务名称为httpd:
sudo yum install httpd -y sudo systemctl start httpd sudo systemctl enable httpd
安装完成后,可通过浏览器访问服务器IP地址,若看到Apache默认欢迎页面,则说明安装成功。
创建虚拟主机配置文件
虚拟主机的核心在于配置文件,定义每个网站的域名、根目录、权限及日志等信息,Apache的虚拟主机配置文件通常存放在特定目录下:Ubuntu/Debian系统位于/etc/apache2/sites-available/,CentOS/RHEL系统位于/etc/httpd/conf.d/。
示例:为域名example.com配置虚拟主机
-
创建网站根目录
假设example.com的网站文件存放在/var/www/example.com,创建目录并设置权限:sudo mkdir -p /var/www/example.com/public_html sudo chown -R $USER:$USER /var/www/example.com/public_html sudo chmod -R 755 /var/www/example.com
$USER为当前用户,确保对目录有读写权限;755权限保证其他用户可访问。 -
编写配置文件
在Ubuntu系统中,创建配置文件/etc/apache2/sites-available/example.com.conf:
<VirtualHost *:80> 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>在CentOS系统中,直接在
/etc/httpd/conf.d/下创建example.com.conf相同,无需额外变量。配置项说明:
ServerName:主域名,ServerAlias:附加域名(如带www的别名);DocumentRoot:网站根目录,存放网页文件;<Directory>:设置目录访问权限,AllowOverride All允许使用.htaccess文件,Require all granted允许所有用户访问;ErrorLog和CustomLog:分别定义错误日志和访问日志的存储路径,便于排查问题。
配置域名解析与本地测试
虚拟主机配置完成后,需确保域名能正确解析到服务器IP,若为本地测试,可修改/etc/hosts文件(需root权限):
sudo nano /etc/hosts ``` 将`服务器IP`替换为实际IP):
服务器IP example.com www.example.com
保存后,在浏览器中访问`http://example.com`,若显示网站根目录下的默认页面(如`index.html`),则说明配置成功。
若为公网域名,需在DNS管理平台(如阿里云、Cloudflare)添加A记录,将域名指向服务器公网IP,等待DNS解析生效(通常几分钟到几小时)。
### 启用虚拟主机与服务验证
1. **启用配置文件**
Ubuntu系统需使用`a2ensite`工具启用虚拟主机:
```bash
sudo a2ensite example.com.conf
禁用默认配置(可选):
sudo a2dissite 000-default.conf
CentOS系统无需额外命令,只要配置文件存放在/etc/httpd/conf.d/且文件名以.confApache会自动加载。
- 检查配置语法并重启服务
执行以下命令检查配置文件语法是否正确:# Ubuntu sudo apache2ctl configtest # CentOS sudo httpd -t
若显示
Syntax OK,则重启Apache服务使配置生效:# Ubuntu sudo systemctl restart apache2 # CentOS sudo systemctl restart httpd
常见问题与注意事项
-
权限问题
若访问网站时出现“403 Forbidden”错误,通常是由于DocumentRoot目录权限不足,可通过ls -ld /var/www/example.com检查目录权限,确保属主为当前用户,其他用户有执行权限(755)。
-
SELinux配置(CentOS)
CentOS默认开启SELinux,可能阻止Apache访问网站目录,可通过以下命令设置安全上下文:sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/example.com(/.*)?" sudo restorecon -Rv /var/www/example.com
-
防火墙设置
若无法访问网站,需检查防火墙是否允许80(HTTP)和443(HTTPS)端口,以Ubuntu的UFW为例:sudo ufw allow 'Apache Full'
CentOS的firewalld:
sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
-
HTTPS配置(可选)
为网站启用HTTPS,可结合Let’s Encrypt免费证书,安装certbot工具(Ubuntu:sudo apt install certbot python3-certbot-apache;CentOS:sudo yum install certbot python3-certbot-apache),执行以下命令自动获取证书并配置:sudo certbot --apache -d example.com -d www.example.com
按提示选择重定向HTTP到HTTPS,即可实现网站加密访问。
配置Apache虚拟主机需完成“安装服务→创建目录→编写配置→启用站点→验证访问”五个核心步骤,重点在于明确DocumentRoot路径、权限设置及域名解析,通过合理配置,可在单台服务器上高效托管多个网站,同时结合SSL证书实现安全访问,实际操作中,若遇到问题,可优先查看Apache错误日志(/var/log/apache2/error.log或/var/log/httpd/error_log),根据日志提示定位并解决,确保虚拟主机稳定运行。


















