在 CentOS 7 服务器上配置 Apache(httpd)的虚拟主机功能,可以让我们在同一台物理服务器上托管多个独立的网站,这极大地提高了服务器的资源利用率和成本效益,每个虚拟主机都可以拥有独立的域名、网站内容和配置,互不干扰,本文将详细介绍如何在 CentOS 7 系统上一步步配置基于域名的虚拟主机。
准备工作
在开始之前,请确保您已经具备以下条件:
- 一台已安装 CentOS 7 的服务器。
- 拥有 root 权限或 sudo 权限的用户账户。
- 服务器已配置静态 IP 地址。
- 已安装 Apache HTTP 服务器(httpd),如果尚未安装,可以使用以下命令进行安装:
sudo yum install httpd -y
- 确保防火墙允许 HTTP 和 HTTPS 流量:
sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
创建网站目录结构
为了保持文件系统的整洁,我们将为每个网站创建独立的目录,假设我们要配置两个网站:example.com
和 test.com
。
# 为 example.com 创建目录 sudo mkdir -p /var/www/example.com/public_html # 为 test.com 创建目录 sudo mkdir -p /var/www/test.com/public_html
设置目录权限
新创建的目录默认属于 root 用户,我们需要将所有权授予 Apache 运行用户(通常是 apache
),以便 Web 服务器能够读取和写入文件。
# 更改 example.com 目录的所有权 sudo chown -R apache:apache /var/www/example.com/public_html # 更改 test.com 目录的所有权 sudo chown -R apache:apache /var/www/test.com/public_html # 确保 /var/www 目录及其子目录具有正确的权限 sudo chmod -R 755 /var/www
创建测试页面
为了验证虚拟主机是否配置成功,我们为每个网站创建一个简单的 index.html
文件。
为 example.com
创建测试页面:
sudo vi /var/www/example.com/public_html/index.html
在文件中添加以下内容:
<html> <head>欢迎来到 example.com</title> </head> <body> <h1>成功!example.com 虚拟主机正在工作!</h1> </body> </html>
为 test.com
创建测试页面:
sudo vi /var/www/test.com/public_html/index.html
在文件中添加以下内容:
<html> <head>欢迎来到 test.com</title> </head> <body> <h1>成功!test.com 虚拟主机正在工作!</h1> </body> </html>
创建虚拟主机配置文件
Apache 的主配置文件是 /etc/httpd/conf/httpd.conf
,为了更好的管理,我们通常将虚拟主机的配置文件放在 /etc/httpd/conf.d/
目录下,Apache 会自动加载此目录下所有以 .conf
结尾的文件。
配置 example.com
创建 example.com.conf
文件:
sudo vi /etc/httpd/conf.d/example.com.conf
添加以下配置内容:
<VirtualHost *:80> ServerName www.example.com ServerAlias example.com DocumentRoot /var/www/example.com/public_html ErrorLog /var/www/example.com/error.log CustomLog /var/www/example.com/requests.log combined </VirtualHost>
配置 test.com
同样,创建 test.com.conf
文件:
sudo vi /etc/httpd/conf.d/test.com.conf
添加以下配置内容:
<VirtualHost *:80> ServerName www.test.com ServerAlias test.com DocumentRoot /var/www/test.com/public_html ErrorLog /var/www/test.com/error.log CustomLog /var/www/test.com/requests.log combined </VirtualHost>
以下是配置文件中关键指令的说明:
指令 | 描述 |
---|---|
<VirtualHost *:80> | 定义一个监听所有 IP 地址 80 端口的虚拟主机。 |
ServerName | 虚拟主机的主域名。 |
ServerAlias | 虚拟主机的别名,可以设置多个,用空格隔开。 |
DocumentRoot | 网站文件存放的根目录。 |
ErrorLog | 错误日志文件的路径。 |
CustomLog | 访问日志文件的路径及格式。 |
测试配置并重启 Apache
在应用新配置之前,最好先检查一下配置文件的语法是否正确。
sudo apachectl configtest
如果屏幕显示 Syntax OK
,说明配置没有问题,现在可以安全地重启 Apache 服务以使更改生效。
sudo systemctl restart httpd
建议将 httpd 服务设置为开机自启:
sudo systemctl enable httpd
本地测试
由于 example.com
和 test.com
是示例域名,您需要在您的本地计算机上修改 hosts
文件,将这两个域名指向您服务器的 IP 地址,以便进行测试。
- 在 Windows 上,编辑
C:WindowsSystem32driversetchosts
文件。 - 在 Linux 或 macOS 上,编辑
/etc/hosts
文件。
在文件末尾添加以下两行(请将 your_server_ip
替换为您服务器的实际 IP 地址):
your_server_ip www.example.com example.com
your_server_ip www.test.com test.com
保存文件后,在浏览器中分别访问 http://www.example.com
和 http://www.test.com
,您应该能看到之前创建的各自对应的测试页面,至此,您已成功在 CentOS 7 上配置了两个基于域名的虚拟主机。
相关问答 (FAQs)
Q1: 我已经按照步骤操作,但访问网站时显示的是 Apache 默认页面,或者提示 403 Forbidden 错误,该怎么办?
A1: 这个问题通常由以下几个原因导致,请逐一排查:
- SELinux 安全上下文问题:CentOS 7 默认开启 SELinux,它可能会阻止 Apache 访问您新创建的目录,您可以使用以下命令修复目录的安全上下文:
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www(/.*)?" sudo restorecon -Rv /var/www
- 防火墙问题:确认防火墙确实已经放行了 80 端口,可以使用
sudo firewall-cmd --list-all
命令检查。 - 目录权限问题:再次确认
/var/www
目录及其子目录的所有者是apache
用户,并且权限设置正确(通常是 755)。 - 配置文件错误:运行
sudo apachectl configtest
确保没有语法错误,并检查DocumentRoot
路径是否与实际目录完全匹配。
Q2: 如何为我的虚拟主机启用 HTTPS (SSL/TLS)?
A2: 为网站启用 HTTPS 需要一个 SSL 证书,您可以从证书颁发机构(CA)购买,或者使用 Let’s Encrypt 获取免费证书,基本步骤如下:
- 安装 mod_ssl 模块:
sudo yum install mod_ssl -y
- 获取 SSL 证书:将您的证书文件(
certificate.crt
)和私钥文件(private.key
)上传到服务器的一个安全目录,如/etc/ssl/certs/
和/etc/ssl/private/
。 - 修改虚拟主机配置:在您的
.conf
文件中,添加一个监听 443 端口的<VirtualHost *:443>
块,并加入 SSL 相关配置:<VirtualHost *:443> ServerName www.example.com DocumentRoot /var/www/example.com/public_html SSLEngine on SSLCertificateFile /etc/ssl/certs/certificate.crt SSLCertificateKeyFile /etc/ssl/private/private.key # 其他日志配置... </VirtualHost>
- 重启 Apache:保存配置后,重启 httpd 服务即可,建议同时配置 HTTP 到 HTTPS 的强制跳转。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复