在Linux服务器环境中,使用Apache搭建多个网站是常见的运维需求,通过合理的配置,可以在同一台服务器上托管多个独立的网站,既节省资源又便于管理,本文将详细介绍基于Apache虚拟主机功能实现多网站部署的完整流程,包括环境准备、配置文件编写、域名绑定及常见问题处理等关键环节。

环境准备与基础检查
在开始配置前,需确保系统已正确安装Apache服务,以Ubuntu系统为例,可通过sudo apt update更新软件包列表,然后执行sudo apt install apache2完成安装,安装完成后,使用systemctl status apache2检查服务状态,确保apache2服务处于active(运行中)状态,建议提前规划好各网站的目录结构,例如在/var/www/下创建site1、site2等独立文件夹,并设置正确的文件所有权限,通常使用chown -R www-data:www-data /var/www/site1命令将目录所有权赋予Apache运行用户。
虚拟主机类型选择
Apache支持基于IP、端口和域名的三种虚拟主机模式,对于多网站部署,基于域名的虚拟主机(Name-based Virtual Host)是最常用的方案,它通过不同的域名区分网站,无需额外IP地址或端口配置,若需隔离不同服务或测试环境,也可结合端口虚拟主机实现,例如通过8080、8081等端口区分不同网站,本文将以域名虚拟主机为例展开说明,其他模式的配置原理类似,仅需调整对应参数即可。
网站目录与权限配置
为每个网站创建独立的根目录是基础步骤,假设需要部署两个网站,分别为example.com和test.com,可执行以下命令创建目录结构:
sudo mkdir -p /var/www/example.com /var/www/test.com sudo echo "<h1>Example Site</h1>" > /var/www/example.com/index.html sudo echo "<h1>Test Site</h1>" > /var/www/test.com/index.html
随后通过chmod -R 755 /var/www/*设置目录权限,确保Apache可读取文件内容,若网站涉及动态内容(如PHP),需额外配置执行权限,并确保已安装对应的模块(如php和libapache2-mod-php)。
虚拟主机配置文件编写
Apache的虚拟主机配置通常存储在/etc/apache2/sites-available/目录下,每个网站建议使用独立的配置文件,例如example.com.conf和test.com.conf,以example.com.conf为例,文件内容应包含以下关键指令:

<VirtualHost *:80>
ServerAdmin admin@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
ServerName定义主域名,ServerAlias可添加额外域名(如带www的子域名),DocumentRoot指定网站根目录,配置完成后,使用sudo a2ensite example.com.conf启用站点,并通过sudo a2dissite 000-default.conf禁用默认站点(避免冲突)。
本地hosts测试与DNS配置
在正式上线前,可通过本地hosts文件进行测试,在本地计算机的hosts文件中添加服务器IP与域名的映射关系,例如168.1.100 example.com test.com,然后通过浏览器访问域名检查是否指向正确网站,测试无误后,需在域名管理后台配置A记录,将域名解析至服务器的公网IP,若使用HTTPS,还需为各域名申请并安装SSL证书,可通过Let's Encrypt的certbot工具实现自动化配置。
Apache服务重启与问题排查
完成所有配置后,执行sudo apache2ctl configtest检查配置语法是否正确,若无错误则通过sudo systemctl restart apache2重启服务,若网站无法访问,可依次排查以下问题:检查防火墙是否放行80端口(sudo ufw allow 'Apache Full'),确认域名解析是否生效(使用nslookup example.com验证),查看Apache错误日志(/var/log/apache2/error.log)定位具体错误,常见的配置错误包括DocumentRoot路径错误、权限不足或端口冲突等。
多网站高级配置技巧
当需要更精细化的管理时,可结合.htaccess文件实现目录权限控制、URL重写等功能,在网站根目录创建.htaccess文件,添加RewriteEngine On实现伪静态,若需强制HTTPS访问,可在虚拟主机配置中添加以下重定向规则:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
通过mod_deflate模块可启用GZIP压缩,提升网站加载速度,配置指令为AddOutputFilterByType DEFLATE text/html text/plain text/xml。

相关问答FAQs
Q1: 如何在同一个IP地址上通过不同端口运行多个网站?
A: 可在虚拟主机配置中修改Listen指令,例如为网站A配置<VirtualHost *:80>,为网站B配置<VirtualHost *:8080>,然后在浏览器中通过http://域名:8080访问网站B,确保Apache已监听对应端口(通过Listen 8080指令),并在防火墙中开放该端口。
Q2: 如何解决多网站访问时出现403 Forbidden错误?
A: 该错误通常由权限问题导致,首先检查网站目录的所有者是否为www-data(使用ls -l /var/www/确认),然后确保目录权限为755,文件权限为644,若使用SELinux,需执行chcon -R -t httpd_sys_content_t /var/www/网站目录调整安全上下文,最后检查Apache配置中的<Directory>指令是否正确设置了AllowOverride和Require指令。