CentOS 配置虚拟主机
CentOS 是一款流行的 Linux 发行版,广泛用于服务器环境,在 CentOS 上配置虚拟主机可以实现一台服务器运行多个网站或应用,从而提高资源利用率和灵活性,本文将详细介绍如何在 CentOS 上配置虚拟主机,确保内容准确、全面且逻辑清晰。
一、前提条件
1、域名:拥有一个指向公共服务器 IP 的域名,建议去 namesilo 注册一个,非常便宜。
2、安装 Apache:确保你的 CentOS 系统上安装了 Apache,可以使用以下命令安装:
sudo yum y install httpd
3、权限:以 root 用户或具有 sudo 特权的用户身份登录。
二、创建目录结构
文档根目录是用于存储域名网站文件并响应请求提供服务的目录,可以将文档根目录设置为所需的任何位置,我们将使用以下目录结构:
/var/www/ ├── example.com │ └── public_html ├── example2.com │ └── public_html ├── example3.com │ └── public_html
对于将在服务器上托管的每个域,我们将在/var/www
内创建一个单独的目录,在域目录中,我们将创建一个public_html
目录,它将成为域文档的根目录并存储域网站文件,为域 example.com 创建根目录:
sudo mkdir p /var/www/example.com/public_html
为了进行测试,请在域的文档根目录内创建一个 index.html 文件:
sudo nano /var/www/example.com/public_html/index.html
将以下代码复制并粘贴到文件中:
<!DOCTYPE html> <html> <head> <title>Welcome to Example.com!</title> </head> <body> <h1>Success! The example.com virtual host is working!</h1> </body> </html>
保存并关闭文件。
三、创建虚拟主机文件
有几种设置虚拟主机的方法,您可以将所有虚拟主机指令添加到一个文件中,也可以为每个虚拟主机指令创建一个新的配置文件,您应该首选第二种方法,这种方法更易于维护,默认情况下,Apache 被配置为从/etc/httpd/conf.d/
目录中加载所有以 .conf 结尾的配置文件,要为特定网站创建虚拟主机,请打开您选择的编辑器并创建以下基本虚拟主机配置文件:
<VirtualHost *:80> ServerName example.com ServerAlias www.example.com ServerAdmin webmaster@example.com DocumentRoot /var/www/example.com/public_html <Directory /var/www/example.com/public_html> Options Indexes +FollowSymLinks AllowOverride All </Directory> ErrorLog /var/log/httpd/example.comerror.log CustomLog /var/log/httpd/example.comaccess.log combined </VirtualHost>
配置文件名必须以 .conf 最佳实践是将域名用作虚拟主机配置文件的名称,编辑文件并保存:
sudo nano /etc/httpd/conf.d/example.com.conf
根据需要编辑文件并保存。
四、测试配置文件语法
使用以下命令测试配置文件语法:
sudo apachectl configtest
如果没有错误,输出内容类似如下:
Syntax OK
要激活新创建的虚拟主机,请使用以下命令重新启动 Apache 服务:
sudo systemctl restart httpd
打开 http://example.com 验证一切是否按预期进行。
五、基于不同方式配置虚拟主机
1. 基于 IP 地址的虚拟主机
可以通过增加两个 IP 地址来配置基于 IP 地址的虚拟主机。
ifconfig ens33:1 192.168.204.135 ifconfig ens33:2 192.168.204.136
然后重新编辑 Apache 配置文件:
<VirtualHost 192.168.204.135:80> DocumentRoot "/var/wwwroot/site1" ErrorLog "logs/site1.error.log" CustomLog "logs/site1.access.log" common <Directory "/var/wwwroot/site1"> Options Indexes FollowSymLinks MultiViews AllowOverride None Require all granted </Directory> </VirtualHost> <VirtualHost 192.168.204.136:80> DocumentRoot "/var/wwwroot/site2" ErrorLog "logs/site2.error.log" CustomLog "logs/site2.access.log" common <Directory "/var/wwwroot/site2"> Options Indexes FollowSymLinks MultiViews AllowOverride None Require all granted </Directory> </VirtualHost>
启动 Apache 服务:
systemctl start httpd
在宿主机访问两个站点:http://192.168.204.135 和 http://192.168.204.136。
2. 基于端口的虚拟主机
编辑 Apache 配置文件:
Listen 8081 <VirtualHost *:8081> DocumentRoot "/var/wwwroot/site1" ErrorLog "logs/site1.error.log" CustomLog "logs/site1.access.log" common <Directory "/var/wwwroot/site1"> Options Indexes FollowSymLinks MultiViews AllowOverride None Require all granted </Directory> </VirtualHost> Listen 8082 <VirtualHost *:8082> DocumentRoot "/var/wwwroot/site2" ErrorLog "logs/site2.error.log" CustomLog "logs/site2.access.log" common <Directory "/var/wwwroot/site2"> Options Indexes FollowSymLinks MultiViews AllowOverride None Require all granted </Directory> </VirtualHost>
启动 Apache 服务:
systemctl start httpd
在宿主机访问两个站点:http://192.168.204.133:8081 和 http://192.168.204.133:8082。
3. 基于域名的虚拟主机
编辑 Apache 配置文件:
<VirtualHost *:80> DocumentRoot "/var/wwwroot/site1" ServerName site1.test.com ErrorLog "logs/site1.error.log" CustomLog "logs/site1.access.log" common <Directory "/var/wwwroot/site1"> Options Indexes FollowSymLinks MultiViews AllowOverride None Require all granted </Directory> </VirtualHost>
在 Windows 上修改 hosts 文件,添加以下内容(根据实际情况自己修改):
192、168.204.135 site1.test.com 192、168.204.135 site2.test.com
在宿主机访问两个站点:http://site1.test.com/ 和 http://site2.test.com/。
常见问题及解答 (FAQs)
问题 1:如何更改虚拟主机的文档根目录?
答:要更改虚拟主机的文档根目录,可以编辑相应的虚拟主机配置文件,找到DocumentRoot
指令并修改其路径,要将 example.com 的文档根目录更改为/newpath/public_html
,则修改为:
DocumentRoot /newpath/public_html
保存文件并重新启动 Apache 服务使更改生效:
sudo systemctl restart httpd
问题 2:如何为虚拟主机启用 SSL?
答:要为虚拟主机启用 SSL,可以使用 Let's Encrypt 提供的免费 SSL 证书,安装 Certbot:
sudo yum install epelrelease y && sudo yum install certbot python2certbotapache y
为你的虚拟主机生成并安装 SSL 证书:
sudo certbot apache d example.com d www.example.com
Certbot 会自动配置 Apache 以使用 SSL,完成后,你可以通过 HTTPS://example.com 访问你的安全网站,如果需要进一步调整 SSL 配置,可以编辑相应的虚拟主机配置文件,添加 SSLEngine on、SSLCertificateFile 和 SSLCertificateKeyFile 等指令。