在单台CentOS服务器上托管多个独立的网站,是Apache HTTP服务器(httpd)最强大且常用的功能之一,这得益于其虚拟主机技术,通过配置虚拟主机,您可以让一台服务器根据用户请求的不同域名或IP地址,响应不同的网站内容,本文将详细介绍在CentOS系统上配置Apache基于域名的虚拟主机的完整流程。
准备工作
在开始之前,请确保您已经具备以下条件:
- 一台已安装CentOS 7或更高版本的云服务器或实体机。
- Apache(httpd)已成功安装并正在运行,如果尚未安装,可以通过
sudo yum install httpd
进行安装,并通过sudo systemctl start httpd
启动服务。 - 拥有sudo权限的用户账户,以便执行管理命令。
- 两个(或更多)已解析到服务器IP地址的域名,在测试阶段,您也可以通过修改本地hosts文件来模拟。
创建网站目录结构
为了保持系统整洁,我们习惯将每个网站的文件存放在独立的目录中,标准的做法是在 /var/www/
目录下为每个站点创建一个文件夹。
假设我们要配置两个网站:site1.example.com
和 site2.example.com
。
创建站点目录
sudo mkdir -p /var/www/site1.example.com/public_html sudo mkdir -p /var/www/site2.example.com/public_html
这里我们在每个站点目录下又创建了一个
public_html
子目录,用于存放实际的网页文件,这是一种良好的安全实践。设置目录权限
Apache服务默认以apache
用户和组运行,我们需要将网站目录的所有权赋予该用户,以确保Apache有权限读取和写入文件。sudo chown -R apache:apache /var/www/site1.example.com sudo chown -R apache:apache /var/www/site2.example.com sudo chmod -R 755 /var/www
创建测试页面
为每个站点创建一个简单的index.html
文件,以便后续验证配置是否成功。echo "<html><body><h1>欢迎来到 Site 1 (site1.example.com)!</h1></body></html>" | sudo tee /var/www/site1.example.com/public_html/index.html echo "<html><body><h1>欢迎来到 Site 2 (site2.example.com)!</h1></body></html>" | sudo tee /var/www/site2.example.com/public_html/index.html
创建虚拟主机配置文件
在CentOS中,Apache的主配置文件是 /etc/httpd/conf/httpd.conf
,但最佳实践是,将所有虚拟主机的配置文件独立存放在 /etc/httpd/conf.d/
目录下,因为Apache会自动加载此目录下所有以 .conf
结尾的文件。
为第一个站点创建配置文件
使用文本编辑器(如vim或nano)创建site1.example.com.conf
文件:sudo nano /etc/httpd/conf.d/site1.example.com.conf
在文件中添加以下内容:
<VirtualHost *:80> ServerName site1.example.com ServerAlias www.site1.example.com DocumentRoot "/var/www/site1.example.com/public_html" ErrorLog "/var/log/httpd/site1.example.com-error_log" CustomLog "/var/log/httpd/site1.example.com-access_log" combined <Directory "/var/www/site1.example.com/public_html"> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost>
为第二个站点创建配置文件
复制第一个配置文件并进行修改,这是最快的方法。sudo cp /etc/httpd/conf.d/site1.example.com.conf /etc/httpd/conf.d/site2.example.com.conf sudo nano /etc/httpd/conf.d/site2.example.com.conf
将文件中的
site1
全部替换为site2
。
启用配置并测试
在应用新配置之前,最好先检查一下语法是否有错误。
检查Apache配置语法
sudo httpd -t
如果屏幕显示
Syntax OK
,说明配置文件没有语法错误。重启Apache服务
配置无误后,重启Apache以使更改生效。sudo systemctl restart httpd
确保Apache服务被设置为开机自启:
sudo systemctl enable httpd
验证结果
在浏览器中分别访问http://site1.example.com
和http://site2.example.com
,如果一切顺利,您应该会看到之前创建的两个不同的欢迎页面,如果域名尚未解析,可以修改您本地电脑的hosts文件,将这两个域名指向服务器的IP地址进行测试。
至此,您已成功在CentOS上配置了Apache的虚拟主机。
常见问题解答 (FAQs)
问题1:为什么访问网站时出现“403 Forbidden”错误?
解答: “403 Forbidden”错误通常意味着Apache服务器找到了请求的文件但没有权限访问它,请按以下步骤排查:
- 检查文件权限: 确保网站目录及其内部文件的权限设置正确,通常目录权限为755,文件权限为644。
- 检查所有者: 确认网站目录的所有者是
apache
用户和组,可以使用chown -R apache:apache /var/www/your_site
命令修正。 - 检查SELinux状态: CentOS默认启用了SELinux,它可能会阻止Apache访问非标准目录,您可以使用
chcon -R -t httpd_sys_content_t /var/www/your_site
命令为网站目录设置正确的SELinux安全上下文。
问题2:如何为我的虚拟主机启用HTTPS(SSL/TLS)?
解答: 要启用HTTPS,您需要为域名获取一个SSL证书,并在Apache中配置一个监听443端口的虚拟主机,最简单和免费的方式是使用Let’s Encrypt。
- 安装Certbot: Certbot是一个可以自动获取和续订Let’s Encrypt证书的工具,在CentOS上可以通过EPEL仓库安装:
sudo yum install certbot python3-certbot-apache
。 - 获取并安装证书: 运行
sudo certbot --apache
命令,Certbot会自动检测您的虚拟主机配置,引导您完成证书申请,并自动修改Apache配置文件,为您创建好HTTPS虚拟主机配置。 - 自动续期: Certbot还会设置一个自动任务来续订证书,之后,您就可以通过
https://your_domain.com
安全地访问您的网站了。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/6988.html