介绍
Apache Web服务器是在互联网上提供Web内容的最流行的方式。 它提供了超过一半的互联网活跃网站,并且非常强大和灵活。
Apache将其功能和组件分解为可以独立定制和配置的各个单元。 描述个人网站或域的基本单位叫做虚拟主机 。 虚拟主机允许一个服务器通过使用匹配系统托管多个域或接口。 这是任何人寻找托管一个VPS以上的多个网站相关。
配置的每个域都会将访问者定向到包含该站点信息的特定目录,而不会指示同一服务器也负责其他站点。 此方案是可扩展的,没有任何软件限制,只要您的服务器可以处理所有网站吸引的流量。
在本指南中,我们将介绍如何在CentOS 7 VPS上设置Apache虚拟主机。 在此过程中,您将了解如何根据所请求的域名向不同的访问者投放不同的内容。
先决条件
在开始使用本指南之前,需要先完成几个步骤。
您将需要访问一个CentOS 7服务器,有一个非root用户sudo
权限。 如果你还没有这个配置是,您可以通过运行CentOS 7初始服务器设置向导来创建此帐户。
您还需要安装Apache以便为其配置虚拟主机。 如果你还没有这样做的话,你可以使用yum
通过CentOS的默认软件仓库安装Apache:
sudo yum -y install httpd
接下来,启用Apache作为CentOS服务,以便它将在重新启动后自动启动:
sudo systemctl enable httpd.service
完成这些步骤后,通过SSH登录为非root用户帐户,然后继续教程。
注:本指南中的示例配置会为一个虚拟主机example.com
,另一个用于example2.com
。 这些将在整个指南中引用,但您应该在替换您自己的域或值,同时遵循。 要了解如何设置你的域名与DigitalOcean,请按照此链接 。
如果你没有任何真正的域可以玩,我们将告诉你如何使用虚拟值测试你的虚拟主机配置接近教程的结尾。
第一步 - 创建目录结构
首先,我们需要创建一个目录结构,以保存网站数据,为访客提供服务。
我们的文档根目录 (Apache着眼于寻找内容服务于顶级目录)将被设置为在各个目录/var/www
目录。 我们将在这里为我们计划制作的每个虚拟主机创建一个目录。
在每个目录中,我们将创建一个public_html
,将举行我们的实际文件的目录。 这给我们在我们的主机的一些灵活性。
我们可以使用这些目录中mkdir
命令(带有-p
标志,使我们能够创建一个文件夹与它里面嵌套文件夹):
sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/example2.com/public_html
请记住,在红色部分代表,我们希望从我们的VPS服务域名。
第二步 - 授予权限
我们现在有我们的文件目录结构,但它们是由我们所拥有root
用户。 如果我们希望我们普通用户能在我们的网页目录修改文件,我们可以改变与所有权chown
:
sudo chown -R $USER:$USER /var/www/example.com/public_html
sudo chown -R $USER:$USER /var/www/example2.com/public_html
在$USER
变量将当前登录的,当您提交该命令的用户的价值。 通过这样做,我们的普通用户现在拥有public_html
子目录,我们将存储我们的内容。
我们还应该修改我们的权限,以确保允许对一般Web目录以及其中的所有文件和文件夹进行读取访问,以便可以正确提供页面:
sudo chmod -R 755 /var/www
您的网络服务器现在应具有提供内容所需的权限,您的用户应该能够在相应的文件夹中创建内容。
第三步 - 为每个虚拟主机创建演示页面
现在我们有了目录结构,让我们创建一些内容来服务。
因为这只是为了演示和测试,我们的网页将很简单。 我们只是要做出index.html
页,每个标识特定域的网站。
让我们先从example.com
。 我们可以打开一个index.html
键入在我们的编辑文件:
nano /var/www/example.com/public_html/index.html
在此文件中,创建一个简单的HTML文档,指示该页面连接到的网站。 对于本指南,我们的第一个域的文件将如下所示:
<html>
<head>
<title>Welcome to Example.com!</title>
</head>
<body>
<h1>Success! The example.com virtual host is working!</h1>
</body>
</html>
保存并在完成后关闭文件。
我们可以复制这个文件作为模板,我们的第二个站点使用index.html
通过键入:
cp /var/www/example.com/public_html/index.html /var/www/example2.com/public_html/index.html
现在让我们打开该文件并修改相关的信息:
nano /var/www/example2.com/public_html/index.html
<html>
<head>
<title>Welcome to Example2.com!</title>
</head>
<body>
<h1>Success! The example2.com virtual host is working!</h1>
</body>
</html>
保存并关闭此文件。 现在,您需要有测试虚拟主机配置所需的页面。
第四步 - 创建新的虚拟主机文件
虚拟主机文件是指定我们单独站点的配置,并指定Apache Web服务器如何响应各种域请求。
首先,我们将需要设置虚拟主机将存储的目录,以及告诉Apache虚拟主机准备好向访问者提供的目录。 本sites-available
目录将保留我们所有的虚拟主机文件,而sites-enabled
目录将举行符号链接,我们要发布的虚拟主机。 我们可以通过键入以下两个目录:
sudo mkdir /etc/httpd/sites-available
sudo mkdir /etc/httpd/sites-enabled
注:此目录布局是由Debian的贡献者出台,但我们在这里,包括它与我们的管理虚拟主机(因为它更容易暂时启用和禁用虚拟主机这种方式)的灵活性。
下一步,我们要告诉Apache查找在虚拟主机sites-enabled
目录。 为了实现这一点,我们将编辑Apache的主配置文件,并添加一行声明一个可选目录用于其他配置文件:
sudo nano /etc/httpd/conf/httpd.conf
将此行添加到文件的末尾:
IncludeOptional sites-enabled/*.conf
完成添加该行后,保存并关闭该文件。 我们现在准备创建我们的第一个虚拟主机文件。
创建第一个虚拟主机文件
首先使用root权限在编辑器中打开新文件:
sudo nano /etc/httpd/sites-available/example.com.conf
注:由于我们所列出的配置中,所有的虚拟主机文件必须在结束.conf
。
首先,首先制作一对标签,将内容指定为侦听端口80(默认HTTP端口)的虚拟主机:
<VirtualHost *:80>
</VirtualHost>
下一步,我们将申报的主要服务器名称, www.example.com 。 我们还会在服务器别名指向example.com,这样的请求www.example.com和example.com提供相同的内容:
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
</VirtualHost>
注:为了使www
域名的版本才能正常工作,该域的DNS配置需要一个指向A记录或CNAME www
请求到服务器的IP。 通配符( *
)的记录也可以工作。 要了解更多关于DNS记录,请查看我们的主机名设置指南 。
最后,我们将指向我们可公开访问的Web文档的根目录。 我们还将告诉Apache在哪里存储此特定站点的错误和请求日志:
<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>
当您完成写出这些项目时,您可以保存并关闭文件。
复制第一个虚拟主机并为其他域自定义
现在我们已经建立了第一个虚拟主机文件,我们可以通过复制该文件并根据需要调整它来创建第二个虚拟主机文件。
通过复制它开始cp
:
sudo cp /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-available/example2.com.conf
在文本编辑器中以root权限打开新文件:
sudo nano /etc/httpd/sites-available/example2.com.conf
您现在需要修改所有信息以引用您的第二个域。 完成后,您的第二个虚拟主机文件可能如下所示:
<VirtualHost *:80>
ServerName www.example2.com
DocumentRoot /var/www/example2.com/public_html
ServerAlias example2.com
ErrorLog /var/www/example2.com/error.log
CustomLog /var/www/example2.com/requests.log combined
</VirtualHost>
完成这些更改后,可以保存并关闭文件。
第五步 - 启用新的虚拟主机文件
现在我们已经创建了虚拟主机文件,我们需要启用它们,以便Apache知道将它们提供给访问者。 要做到这一点,我们可以创建一个符号链接在每个虚拟主机sites-enabled
目录:
sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/example.com.conf
sudo ln -s /etc/httpd/sites-available/example2.com.conf /etc/httpd/sites-enabled/example2.com.conf
完成后,重新启动Apache以使这些更改生效:
sudo apachectl restart
第六步 - 设置本地主机文件(可选)
如果你一直在使用的例子域,而不是实际域测试此过程中,您也可以通过暂时修改测试你的虚拟主机的功能, hosts
在本地计算机上的文件。 这将拦截您配置的域的任何请求,并将它们指向您的VPS服务器,就像DNS系统将使用注册域一样。 这只会从您的计算机工作,但是,只是有用的测试目的。
注意:请确保您的本地计算机上运行了这些步骤,而不是你的VPS服务器。 您将需要访问该计算机的管理凭据。
如果你是一个Mac或Linux操作系统的计算机上编辑本地hosts
通过键入具有管理权限的文件:
sudo nano /etc/hosts
如果你是一个Windows机器上,你可以找到改变您的主机文件说明这里 。
您需要添加的详细信息是您的VPS的公共IP地址,然后是您要用于访问该VPS的域:
127.0.0.1 localhost
127.0.1.1 guest-desktop
server_ip_address example.com
server_ip_address example2.com
这将直接对任何请求example.com
和example2.com
我们的本地计算机上,并将其传送给我们,服务器server_ip_address
。
第七步 - 测试你的结果
现在您已配置虚拟主机,您可以通过转到您在Web浏览器中配置的域来轻松地测试您的设置:
http://example.com
您应该看到如下所示的页面:
同样,如果您访问其他域,您将看到为其创建的文件。
如果您配置的所有站点都工作良好,那么您已经在同一台CentOS服务器上成功配置了新的Apache虚拟主机。
如果您调整您的家用电脑的hosts
文件,您可能需要删除,你现在还说您确认您的配置的工作线路。 这将阻止您的主机文件填充实际不必要的条目。
结论
此时,您现在应该有一个CentOS 7服务器处理多个具有单独域的站点。 您可以按照上述步骤扩展此过程,以便稍后制作其他虚拟主机。 Apache没有软件限制Apache可以处理的域名数量,所以随意制作尽可能多的服务器能够处理。