如何在CentOS上用Apache基于域名配置多个网站?

在服务器管理领域,高效地利用资源是核心目标之一,对于许多个人开发者、小型企业乃至大型机构而言,在一台物理服务器或云主机上托管多个网站是一种常见且经济高效的解决方案,CentOS 以其稳定性和安全性,成为许多服务器的首选操作系统,而 Apache(在 CentOS 中通常称为 httpd)则是全球最流行的 Web 服务器软件之一,本文将详细介绍如何在 CentOS 系统上配置 Apache 服务器,以实现单一 IP 地址下托管多个独立网站的功能,这一过程主要通过 Apache 的虚拟主机技术来完成。

如何在CentOS上用Apache基于域名配置多个网站?

理解虚拟主机

虚拟主机是 Apache 提供的一项核心功能,它允许单个服务器实例响应针对多个不同域名或 IP 地址的请求,对于大多数场景而言,我们使用的是“基于名称的虚拟主机”,这意味着所有网站共享同一个 IP 地址,当用户的浏览器请求一个网站时,它会发送一个 Host 头部信息,告知服务器它想要访问的具体域名(www.example1.com),Apache 服务器接收到请求后,会根据这个 Host 头部来匹配对应的虚拟主机配置,并返回相应网站的内容。

准备工作

在开始配置之前,请确保您已经具备以下条件:

  1. 一台已安装 CentOS 7 或更高版本的服务器。
  2. 拥有 sudoroot 权限,以便执行系统管理命令。
  3. Apache Web 服务器(httpd)已安装,如果尚未安装,可以通过 sudo yum install httpd -y 命令进行安装。
  4. 您的域名(site1.comsite2.com)的 DNS 记录已正确配置,将它们指向您服务器的公网 IP 地址。
  5. 防火墙已允许 HTTP(80 端口)和 HTTPS(443 端口)的流量,可以使用 sudo firewall-cmd --permanent --add-service=httpsudo firewall-cmd --permanent --add-service=https 命令,然后执行 sudo firewall-cmd --reload

配置多网站步骤

我们将以配置两个网站——site1.comsite2.com——为例,逐步讲解整个过程。

创建网站目录结构

为每个网站创建独立的目录来存放其文件,这些目录位于 /var/www/ 下。

# 为 site1.com 创建目录
sudo mkdir -p /var/www/site1.com/public_html
# 为 site2.com 创建目录
sudo mkdir -p /var/www/site2.com/public_html

public_html 是一个约定俗成的名称,用于存放网站的实际文件(如 HTML, CSS, PHP 等)。

设置目录权限

为了确保 Apache 进程(在 CentOS 中默认以 apache 用户运行)能够读取和执行这些目录中的文件,我们需要正确设置所有权和权限。

# 更改目录所有者为 apache 用户
sudo chown -R apache:apache /var/www/site1.com
sudo chown -R apache:apache /var/www/site2.com
# 设置目录权限,确保所有者有读写执行权限,其他用户有读和执行权限
sudo chmod -R 755 /var/www

创建测试页面

为了验证配置是否成功,我们为每个网站创建一个简单的 index.html 文件。

# 为 site1.com 创建主页
echo "<html><head><title>欢迎来到 Site1</title></head><body><h1>Site1.com 网站运行成功!</h1></body></html>" | sudo tee /var/www/site1.com/public_html/index.html
# 为 site2.com 创建主页
echo "<html><head><title>欢迎来到 Site2</title></head><body><h1>Site2.com 网站运行成功!</h1></body></html>" | sudo tee /var/www/site2.com/public_html/index.html

创建虚拟主机配置文件

Apache 的主配置文件是 /etc/httpd/conf/httpd.conf,最佳实践不是直接修改此文件,而是在 /etc/httpd/conf.d/ 目录下为每个网站创建独立的配置文件,Apache 会自动加载此目录下所有 .conf 结尾的文件。

site1.com 创建配置文件:

如何在CentOS上用Apache基于域名配置多个网站?

sudo vi /etc/httpd/conf.d/site1.com.conf

在文件中添加以下内容:

<VirtualHost *:80>
    ServerAdmin admin@site1.com
    ServerName site1.com
    ServerAlias www.site1.com
    DocumentRoot /var/www/site1.com/public_html
    ErrorLog /var/log/httpd/site1.com-error.log
    CustomLog /var/log/httpd/site1.com-access.log combined
</VirtualHost>

同样,为 site2.com 创建配置文件:

sudo vi /etc/httpd/conf.d/site2.com.conf

注意修改 ServerName, ServerAlias, DocumentRoot 和日志文件路径:

<VirtualHost *:80>
    ServerAdmin admin@site2.com
    ServerName site2.com
    ServerAlias www.site2.com
    DocumentRoot /var/www/site2.com/public_html
    ErrorLog /var/log/httpd/site2.com-error.log
    CustomLog /var/log/httpd/site2.com-access.log combined
</VirtualHost>

检查配置并重启 Apache

在应用新配置之前,最好先检查一下语法是否有误。

sudo apachectl configtest

如果屏幕显示 Syntax OK,说明配置文件没有语法错误,现在可以安全地重启 Apache 服务以使更改生效。

sudo systemctl restart httpd

确保 Apache 服务已设置为开机自启:

sudo systemctl enable httpd

验证结果

在浏览器中分别访问 http://site1.comhttp://site2.com(DNS 尚未生效,可以通过修改本地 hosts 文件来测试),您应该能看到之前为每个网站创建的、内容不同的测试页面。

配置指令详解

下表小编总结了虚拟主机配置中一些关键指令的作用:

指令 描述 示例
<VirtualHost *:80> 定义一个虚拟主机块,*:80 表示监听所有 IP 地址的 80 端口 <VirtualHost *:80>
ServerAdmin 网站管理员的电子邮件地址,会在错误页面显示 ServerAdmin admin@site1.com
ServerName 网站的主域名,用于匹配请求 ServerName site1.com
ServerAlias 网站的别名,可以指定多个,如带 www 的域名 ServerAlias www.site1.com
DocumentRoot 网站文件存放的根目录 DocumentRoot /var/www/site1.com/public_html
ErrorLog 指定该网站的错误日志文件路径 ErrorLog /var/log/httpd/site1.com-error.log
CustomLog 指定该网站的访问日志文件路径及格式 CustomLog /var/log/httpd/site1.com-access.log combined

安全与维护

在 CentOS 上,SELinux(Security-Enhanced Linux)是一个重要的安全模块,有时,即使文件权限正确,SELinux 也可能阻止 Apache 访问新创建的目录,如果遇到 403 Forbidden 错误,可以检查并修改 SELinux 上下文:

如何在CentOS上用Apache基于域名配置多个网站?

sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/site1.com(/.*)?"
sudo restorecon -Rv /var/www/site1.com
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/site2.com(/.*)?"
sudo restorecon -Rv /var/www/site2.com

随着网站数量的增加,日志管理也变得重要,可以使用 logrotate 工具来自动压缩、删除和轮转日志文件,防止它们占满磁盘空间。


相关问答FAQs

问题1:我按照步骤操作了,但访问两个域名都显示的是同一个网站(通常是 Apache 默认测试页),这是为什么?

解答: 这个问题通常由以下几个原因造成:

  • DNS 缓存: 您的本地计算机或网络中的 DNS 服务器可能仍有旧的缓存,请尝试清除浏览器缓存或使用其他设备访问。
  • 配置文件未生效: 确保您的虚拟主机配置文件(.conf)确实在 /etc/httpd/conf.d/ 目录下,并且执行了 sudo systemctl restart httpd,可以运行 sudo apachectl -S 命令,它会列出当前 Apache 已加载的所有虚拟主机及其配置,检查您的网站是否在其中且 DocumentRoot 路径正确。
  • 默认配置覆盖: 检查主配置文件 /etc/httpd/conf/httpd.conf 中是否有一个未被注释的、更宽泛的 DocumentRoot 指令,它可能会在基于名称的虚拟主机匹配失败时作为默认选项,确保 NameVirtualHost *:80(在旧版本 Apache 中)或 <VirtualHost *:80> 的配置是正确的。
  • SELinux 问题: 如上文所述,SELinux 可能会阻止访问,检查 /var/log/audit/audit.log 中是否有 httpd 相关的 AVC 拒绝日志,并使用 semanagerestorecon 命令修正文件上下文。

问题2:如何为这些网站添加 HTTPS 支持?

解答: 为网站启用 HTTPS(SSL/TLS)是现代 Web 的标准做法,最简单和免费的方法是使用 Let’s Encrypt 提供的 SSL 证书,您可以通过 certbot 工具来自动化这个过程。

  1. 安装 Certbot: 首先需要安装 EPEL 仓库,然后安装 Certbot 和其 Apache 插件,命令如下:
    sudo yum install epel-release -y
    sudo yum install certbot python3-certbot-apache -y
  2. 获取并安装证书: Certbot 可以自动检测您的 Apache 虚拟主机配置,并为您获取和安装证书,运行以下命令,并将 site1.com 替换为您的域名:
    sudo certbot --apache -d site1.com -d www.site1.com

    Certbot 会引导您完成几个步骤,包括输入电子邮件地址、同意服务条款等,成功后,它会自动修改您的 Apache 配置文件,添加 SSL 配置,并设置一个定时任务来自动续订证书。

  3. 为其他网站重复操作: 对您服务器上的每个网站重复上述第二步,为它们分别获取和安装 SSL 证书,完成后,您的网站就可以通过 https:// 安全访问了。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-10-07 14:20
下一篇 2025-10-07 14:23

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信