在Apache服务器中配置不同域名的虚拟主机,是实现多网站托管的核心技术,通过合理的配置,可以在单一服务器上运行多个独立域名对应的网站,各网站之间互不干扰,以下将详细介绍Apache设置不同域名的具体步骤、配置要点及常见问题的解决方案。

虚拟主机类型选择
Apache支持基于IP地址、基于端口和基于域名的三种虚拟主机类型,对于不同域名的配置,最常用的是基于域名的虚拟主机(Name-Based Virtual Hosts),这种方式无需为每个域名分配独立IP地址,极大节省了服务器资源,配置前需确保服务器已安装Apache服务,并通过httpd -v命令确认版本(建议2.4以上版本,配置语法更简洁)。
配置文件准备
Apache的主配置文件通常位于/etc/httpd/conf/httpd.conf(CentOS/RHEL)或/etc/apache2/apache2.conf(Debian/Ubuntu),在配置虚拟主机前,建议先创建独立的配置文件以提升可维护性,在/etc/apache2/sites-available/目录下创建domain1.conf和domain2.conf文件,然后在主配置文件中通过IncludeOptional sites-enabled/*.conf引入这些文件。
虚拟主机核心配置
以配置两个域名www.example1.com和www.example2.com为例,单台服务器IP地址为168.1.100,在domain1.conf中写入以下内容:
<VirtualHost *:80>
ServerName www.example1.com
ServerAlias example1.com
DocumentRoot /var/www/example1
ErrorLog ${APACHE_LOG_DIR}/example1_error.log
CustomLog ${APACHE_LOG_DIR}/example1_access.log combined
</VirtualHost>参数说明:
ServerName:主域名,用于浏览器访问匹配ServerAlias:附加域名,可配置多个,用空格分隔DocumentRoot:网站根目录,需提前创建并设置权限(chown -R www-data:www-data /var/www/example1)ErrorLog/CustomLog:错误日志和访问日志路径,建议按域名区分便于排查问题
同理配置domain2.conf,只需修改ServerName、ServerAlias和DocumentRoot为对应值,配置完成后,使用a2ensite domain1.conf命令启用站点(Debian/Ubuntu),或通过ln -s创建软链接至sites-enabled目录(CentOS/RHEL)。

DNS解析与本地测试
配置虚拟主机前,需确保域名的DNS解析已指向服务器IP地址,可通过ping www.example1.com命令验证解析结果,若本地测试需提前配置hosts文件(Windows路径为C:WindowsSystem32driversetchosts,Linux/Mac为/etc/hosts),添加内容:
168.1.100 www.example1.com
192.168.1.100 www.example2.com使用systemctl reload apache2命令重启服务后,通过浏览器访问测试域名,确认是否指向正确的网站目录。
HTTPS配置(可选)
若需启用HTTPS,需为每个域名申请SSL证书(可使用Let’s Encrypt免费证书),在虚拟主机配置中添加443端口监听,并启用SSL模块:
<VirtualHost *:443>
ServerName www.example1.com
DocumentRoot /var/www/example1
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example1.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example1.com/privkey.pem
</VirtualHost>配置完成后,需启用ssl模块(a2enmod ssl)并重启服务,可通过浏览器地址栏的锁图标验证证书有效性。
多PHP版本配置(高级场景)
若不同域名需运行不同版本的PHP,可通过mod_php和php-fpm结合实现,以PHP 7.4和PHP 8.0为例,安装对应版本的PHP-FPM后,在虚拟主机配置中添加:

<FilesMatch .php$>
SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost/"
</FilesMatch>为不同域名指定不同的php-fpm socket路径,实现PHP版本隔离。
常见问题排查
- 访问错误域名跳转到默认站点:检查
ServerName是否拼写正确,确保配置文件语法无误(apache2ctl configtest) - 403 Forbidden错误:确认
DocumentRoot目录权限及SELinux状态(setsebool -P httpd_can_network_connect 1) - SSL证书错误:验证证书路径是否正确,检查域名是否与证书匹配
配置示例对比表
| 配置项 | 示例1(example1.com) | 示例2(example2.com) |
|---|---|---|
| ServerName | www.example1.com | www.example2.com |
| DocumentRoot | /var/www/example1 | /var/www/example2 |
| ErrorLog | /var/log/apache2/example1_error.log | /var/log/apache2/example2_error.log |
| SSL证书路径 | /etc/letsencrypt/live/example1.com/ | /etc/letsencrypt/live/example2.com/ |
通过以上步骤,即可完成Apache服务器对不同域名的独立配置,实际运维中,建议结合.htaccess文件实现目录级权限控制,并定期备份配置文件,确保服务器稳定运行。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/16685.html
