Apache 虚拟主机:RHEL 系统中基于名称和基于 IP 的虚拟主机
虚拟主机是一种在单个服务器上托管多个网站或域名的概念,这样做是为了减少企业或组织的资源开销和运行成本。
Apache Web 服务器允许系统管理员轻松为每个网站配置虚拟主机,从而简化了托管多个网站的过程。虚拟托管可以基于 IP,也可以基于名称。
在本教程中,我们将探讨如何在 Linux 中使用基于 IP 和基于名称的虚拟主机在基于 RHEL 的发行版(如Fedora、CentOS Stream、Rocky Linux和Alma Linux)中设置虚拟主机。
共享网络托管和经销商网络托管的概念主要基于 Apache 的这一特性。
Linux 中的 Apache 虚拟主机类型
Apache提供两种类型的虚拟主机。
基于名称的虚拟主机
在这种类型的托管中,多个域名或网站可以托管在一台服务器上,只需使用一个 IP 地址。简而言之,所有域名将共享一个 IP 地址。这是最容易配置的虚拟托管类型,因为您需要做的就是将域名映射到 IP 地址,然后为每个域名配置 Apache 虚拟主机。
基于 IP 的虚拟主机
基于 IP 的虚拟主机为每个域名分配一个唯一的 IP 地址。这些 IP 地址可以使用多张 NIC 卡或一张 NIC 卡连接到服务器。
测试环境
- 操作系统— Fedora 34
- 应用程序– Apache Web 服务器
- IP 地址– 192.168.2.105
- IP 地址– 192.168.2.106
- 域名– www.mydomain1.com
- 域名– www.mydomain2.com
如何设置基于 IP 和基于名称的 Apache 虚拟主机
在开始之前,请确保使用dnf 命令在您的系统上安装了Apache Web 服务器,如图所示。
$ sudo dnf install httpd -y
设置基于名称的虚拟主机
设置基于名称的虚拟主机的第一步是在/etc/hosts文件中设置域名解析。因此,以 root 用户身份运行以下命令来添加指向主机 IP 地址的域名条目。
$ echo '192.168.2.105 www.mydomain1.com' >> /etc/hosts $ echo '192.168.2.105 www.mydomain2.com' >> /etc/hosts
下一步是创建一个包含网站文件的目录。因此,我们将在文档根目录中为虚拟主机创建两个目录,即Apache 配置中的/var/www/html文件夹。
$ sudo mkdir /var/www/html/mydomain1.com/ $ sudo mkdir /var/www/html/mydomain2.com/
下一步是修改虚拟主机文件,该文件将指示 Apache IP 监听所有域名的传入 Apache Web 服务器请求。因此,使用您喜欢的文本编辑器打开 Apache 配置文件。
$ sudo vim /etc/httpd/conf/httpd.conf
为两个虚拟主机添加以下代码块。
<VirtualHost 192.168.2.105:80> ServerName mydomain1.com ServerAlias www.mydomain1.com DocumentRoot /var/www/html/mydomain1.com/ ErrorLog logs/www.mydomain1.com-error_log CustomLog logs/www.mydomain1.com-access_log common </VirtualHost> <VirtualHost 192.168.2.105:80> ServerName mydomain2.com ServerAlias www.mydomain2.com DocumentRoot /var/www/html/mydomain2.com ErrorLog logs/www.mydomain2.com-error_log CustomLog logs/www.mydomain2.com-access_log common </VirtualHost>
保存更改并退出。接下来,检查语法是否正确并且没有错误。
$ httpd -t
接下来,我们将为每个域创建 HTML 测试页面并添加一些内容,以确认浏览器中的一切是否正常运行。
对于 mydomain1.com
在mydomain1.com目录下创建一个index.html文件。
$ sudo vim /var/www/html/mydomain1.com/index.html
粘贴以下行。
<html> <head> <title>My sample site</title> </head> <body> <h1>Success! Welcome to mydomain1.com.</h1> </body> </html>
保存更改并退出文件。
对于 mydomain2.com
在mydomain2.com目录下创建一个index.html文件。
$ sudo vim /var/www/html/mydomain2.com/index.html
粘贴以下行。
<html> <head> <title>My sample site</title> </head> <body> <h1>Success! Welcome to mydomain2.com.</h1> </body> </html>
保存更改并退出文件。
现在启动 Apache Web 服务器并确认它正在运行。
$ sudo systemctl start httpd $ sudo systemctl status httpd
如果您启用了防火墙,请允许HTTP和HTTPS(必要时)流量。
$ sudo firewall-cmd --add-service=http --zone=public --permanent $ sudo firewall-cmd --add-service=https --zone=public --permanent $ sudo firewall-cmd --reload
现在从浏览器测试域。
设置基于 IP 的虚拟主机 Linux
基于 IP 的虚拟主机,顾名思义,就是为您的 Linux 服务器分配多个 IP 地址。在大多数情况下,您的系统会连接两个或更多 NIC 卡以提供多个 IP 地址。
基于 IP 的虚拟托管的目标是为每个域分配一个唯一的 IP 地址,该地址不会被任何其他域使用。
如果您的网站使用 SSL 证书 ( mod_ssl ) 加密或在不同端口上运行,则这是理想的选择。在我们的设置中,我们有两个 NIC 适配器。
要查看系统上的 IP 配置,请运行ifconfig或ip a 命令。
$ ifconfig OR $ ip addr
我们的服务器有两个 IP 地址,每个分配给一个 NIC。IP 192.168.2.106分配给ens160,192.168.2.105分配给ens224。
再次,让我们配置httpd.conf文件。
$ sudo vim /etc/httpd/conf/httpd.conf
按照图示为两个域创建虚拟主机。确保每个 IP 地址都分配给其各自的虚拟主机配置。
<VirtualHost 192.168.2.105:80> ServerName mydomain1.com ServerAlias www.mydomain1.com DocumentRoot /var/www/html/mydomain1.com/ ErrorLog logs/www.mydomain1.com-error_log CustomLog logs/www.mydomain1.com-access_log common </VirtualHost> <VirtualHost 192.168.2.106:80> ServerName mydomain2.com ServerAlias www.mydomain2.com DocumentRoot /var/www/html/mydomain2.com ErrorLog logs/www.mydomain2.com-error_log CustomLog logs/www.mydomain2.com-access_log common </VirtualHost>
保存并退出配置文件。接下来,修改/etc/hosts文件,如下所示。
$ echo '192.168.2.105 www.mydomain1.com' >> /etc/hosts $ echo '192.168.2.106 www.mydomain2.com'>> /etc/hosts
确认条目:
$ cat /etc/hosts 192.168.2.105 www.mydomain1.com 192.168.2.106 www.mydomain2.com
接下来,重新启动 Apache 网络服务器以使更改生效。
$ sudo systemctl restart httpd
最后,通过访问所示的 URL 来测试基于 IP 的虚拟主机设置。
http://192.168.2.105 http://192.168.2.106
此测试确认基于 IP 的虚拟主机正常运行!
结论
这就是本讲座的全部内容。我们希望您能够无缝配置这两种类型的虚拟主机,而不会遇到太多问题。非常感谢您对本指南的反馈。