Apache服务器配置两个域名的核心在于正确启用虚拟主机功能,并确保DNS解析与服务器文件路径的精准对应,通过修改httpd.conf主配置文件开启虚拟主机支持,随后在extra/httpd-vhosts.conf文件中定义两个独立的<VirtualHost :80>区块,分别指定不同的ServerName和DocumentRoot,即可实现单IP多站点的高效运行,这是Apache配置中实现资源复用的标准方案。

前期环境准备与核心文件定位
在开始配置之前,必须确认Apache服务的基础环境状态,确保Apache服务已正确安装并处于运行状态,且拥有两个有效的域名,假设我们拥有domain1.com和domain2.com两个域名,且均已解析到同一台服务器的IP地址。
- 定位配置文件:
Apache的主配置文件通常位于/usr/local/apache/conf/httpd.conf或/etc/httpd/conf/httpd.conf,具体路径视安装方式而定。 - 开启虚拟主机模块:
打开httpd.conf文件,搜索httpd-vhosts.conf相关行,默认情况下,该行可能被注释掉。- 找到
#Include conf/extra/httpd-vhosts.conf。 - 删除前面的“#”号,取消注释,使主配置文件能够加载虚拟主机配置文件。
- 找到
- 加载核心模块:
确保mod_vhost_alias模块已加载,虽然基于名称的虚拟主机主要依赖核心功能,但确保模块加载无误是排查故障的关键一步。
编辑虚拟主机配置文件
进入conf/extra/目录,打开httpd-vhosts.conf文件,这是实现Apache配置两个域名的关键操作区域,默认文件中可能包含示例配置,建议清空或注释掉示例,从头编写。
配置代码示例:
# 设定监听端口,通常默认为80
NameVirtualHost :80
# 第一个域名配置
<VirtualHost :80>
ServerAdmin webmaster@domain1.com
DocumentRoot "/var/www/html/domain1"
ServerName domain1.com
ServerAlias www.domain1.com
ErrorLog "logs/domain1-error.log"
CustomLog "logs/domain1-access.log" common
<Directory "/var/www/html/domain1">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
# 第二个域名配置
<VirtualHost :80>
ServerAdmin webmaster@domain2.com
DocumentRoot "/var/www/html/domain2"
ServerName domain2.com
ServerAlias www.domain2.com
ErrorLog "logs/domain2-error.log"
CustomLog "logs/domain2-access.log" common
<Directory "/var/www/html/domain2">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
核心参数详解:
- NameVirtualHost :80:
这条指令告诉Apache,在80端口上使用基于名称的虚拟主机,这是实现单IP多域名的基石。 - VirtualHost标签:
每个<VirtualHost :80>代表一个独立的站点,星号代表监听所有可用IP,若服务器有多个IP,可指定具体IP地址。 - DocumentRoot:
这是网站根目录的绝对路径,两个域名必须指向不同的目录,否则访问会显示相同内容。 - ServerName:
指定该虚拟主机的主域名。 - Directory权限控制:
这是最容易忽略的环节,Apache 2.4版本默认拒绝所有访问,必须显式添加Require all granted,否则配置完成后访问站点会出现403 Forbidden错误。
目录创建与权限设置

配置文件修改完毕后,需要在服务器上创建对应的网站目录和测试文件。
- 创建目录:
执行命令mkdir -p /var/www/html/domain1和mkdir -p /var/www/html/domain2。 - 创建测试页:
分别在两个目录下创建index.html文件,写入不同的内容,Welcome to Domain1”,以便后续验证配置是否生效。 - 设置权限:
确保Apache运行用户(通常是www-data或apache)对网站目录拥有读取和执行权限,执行chown -R apache:apache /var/www/html/domain1及第二个域名的相应命令。
配置验证与服务重启
修改配置文件后,切不可直接重启服务,应先进行语法检查。
- 语法检查:
执行命令apachectl configtest或httpd -t。- 若显示
Syntax OK,则表示配置无误。 - 若报错,需根据提示检查路径拼写或标签闭合情况。
- 若显示
- 重启服务:
执行systemctl restart httpd或apachectl restart使配置生效。
常见问题与深度解析
在实际运维中,apache 配置2个域名_Apache配置过程中常会遇到“所有域名都跳转到第一个站点”的问题。
- 原因分析:
这通常是因为DNS解析未生效,或者未正确配置NameVirtualHost指令,在Apache 2.4及以后版本中,NameVirtualHost指令有时可以省略,系统会自动推断,但在复杂网络环境下,显式声明依然是最佳实践。 - 优先级匹配:
Apache会根据VirtualHost的排列顺序进行匹配,如果请求的域名未在任何ServerName或ServerAlias中找到,Apache会自动使用配置文件中的第一个VirtualHost作为默认站点,建议将流量最大的域名放在第一位,或专门配置一个默认站点处理非法域名请求。
安全性加固建议
配置完成后,为了符合生产环境的安全标准,建议进行以下调整:

- 关闭目录列表:
将Options Indexes FollowSymLinks中的Indexes去掉,防止目录下无首页文件时泄露文件列表。 - 隐藏版本信息:
在httpd.conf中设置ServerTokens Prod和ServerSignature Off,避免在错误页面暴露Apache版本号,减少被针对性攻击的风险。 - 日志轮询:
随着访问量增加,日志文件会迅速膨胀,建议配置rotatelogs或使用系统日志服务进行日志切割,防止磁盘写满导致服务宕机。
相关问答
配置完成后,访问两个域名都显示第一个域名的内容,如何解决?
答:这种情况通常由两个原因导致,检查DNS解析是否生效,确保两个域名都正确指向服务器IP,检查httpd-vhosts.conf文件中是否正确设置了ServerName,且两个<VirtualHost>区块内的ServerName是否互不冲突,如果DNS未生效,浏览器可能会带着错误的Host头访问,导致Apache匹配到默认的第一个虚拟主机,清除浏览器缓存或使用隐私模式测试也是排查干扰的有效手段。
如何在Apache配置中实现一个域名强制跳转到HTTPS?
答:这需要结合.htaccess文件或在虚拟主机配置段中添加重写规则,首先确保服务器已加载mod_rewrite模块,在<VirtualHost :80>标签内添加以下代码:
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.)$ https://%{HTTP_HOST}$1 [R=301,L]
这段代码会检测当前连接是否为HTTPS,如果不是,则通过301永久重定向到HTTPS地址,这对于SEO优化和用户数据安全至关重要。
如果您在配置过程中遇到其他疑难杂症,欢迎在评论区留言讨论,我们将提供更深入的解决方案。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/110181.html