分类
文章

如何在Ubuntu 18.04上设置Apache虚拟主机

介绍

Apache Web服务器是在Internet上提供网站服务的一种流行方法。截至2019年,据估计它将为所有活动网站中的29%提供服务,并且为开发人员提供了鲁棒性和灵活性。使用Apache,管理员可以使用匹配的系统将一台服务器设置为通过单个接口或IP托管多个域或站点。

使用Apache配置的每个域或单个站点(称为“虚拟主机”)都会将访问者定向到保存该站点信息的特定目录。这样做是在不指示同一服务器也负责其他站点的情况下完成的。只要您的服务器可以处理负载,此方案就可以扩展,没有任何软件限制。描述单个站点或域的基本单位称为virtual host

在本指南中,我们将引导您逐步了解如何在Ubuntu 18.04服务器上设置Apache虚拟主机。在此过程中,您将学习如何根据他们请求的域向不同的访问者提供不同的内容。

先决条件

在开始本教程之前,您应该创建一个非root用户

您还需要安装Apache才能完成这些步骤。如果尚未这样做,则可以通过apt打包方式在服务器上安装Apache :

  • sudo apt update
  • sudo apt install apache2

如果您想要更详细的说明以及防火墙设置,请参阅我们的指南“ 如何在Ubuntu 18.04上安装Apache Web服务器”

对于本指南的目的,我们的配置会为一个虚拟主机example.com,另一个test.com。在本指南中将引用所有这些内容,但是在后续操作中,您应该替换自己的域或值。

如果您正在使用测试值,我们将在稍后显示如何编辑本地主机文件以测试配置。即使您的内容无法通过域名提供给其他访问者,这也将允许您从家用计算机验证您的配置。

第一步-创建目录结构

我们要采取的第一步是创建一个目录结构,该目录结构将保存我们将提供给访问者的站点数据。

我们document root的目录(Apache用来查找要提供的内容的顶级目录)将设置为该/var/www目录下的各个目录。我们将在此处为我们计划制造的两个虚拟主机创建一个目录。

在每个的这些目录中,我们将创建一个public_html将容纳我们的实际文件的文件夹。这使我们在托管方面具有一定的灵活性。

例如,对于我们的网站,我们将按照以下方式创建目录。如果您使用的是实际域或备用值,请换成突出显示的文本。

  • sudo mkdir -p /var/www/example.com/public_html
  • sudo mkdir -p /var/www/test.com/public_html

红色部分代表我们要从VPS提供服务的域名。

第二步-授予权限

现在我们有了文件的目录结构,但是它们归我们的根用户所有。如果我们希望普通用户能够修改我们的Web目录中的文件,则可以通过执行以下操作来更改所有权:

  • sudo chown -R $USER:$USER /var/www/example.com/public_html
  • sudo chown -R $USER:$USER /var/www/test.com/public_html

$USER按下时,该变量将采用您当前登录的用户的值ENTER。通过这样做,我们的普通用户现在拥有public_html将要存储内容的子目录。

我们还应该修改权限,以确保允许对常规Web目录及其包含的所有文件和文件夹进行读取访问,以便可以正确提供页面:

  • sudo chmod -R 755 /var/www

您的Web服务器现在应该具有提供内容所需的权限,并且您的用户应该能够在必要的文件夹中创建内容。

第三步-为每个虚拟主机创建演示页面

现在,我们有了目录结构。让我们创建一些要服务的内容。

出于演示目的,我们将为index.html每个站点创建一个页面。

让我们开始吧example.com。我们可以index.html在文本编辑器中打开文件,在这种情况下,我们将使用nano:

  • nano /var/www/example.com/public_html/index.html

在此文件中,创建一个HTML文档,该文档指示其连接到的站点,如下所示:

/var/www/example.com/public_html/index.html
<html>
  <head>
    <title>Welcome to Example.com!</title>
  </head>
  <body>
    <h1>Success! The example.com virtual host is working!</h1>
  </body>
</html>

保存并关闭文件(纳米,按CTRL+ X然后YENTER)当您完成。

我们可以通过键入以下内容来复制此文件以用作我们第二个站点的基础:

  • cp /var/www/example.com/public_html/index.html /var/www/test.com/public_html/index.html

然后,我们可以打开文件并修改相关信息:

  • nano /var/www/test.com/public_html/index.html
/var/www/test.com/public_html/index.html
<html>
  <head>
    <title>Welcome to Test.com!</title>
  </head>
  <body> <h1>Success! The test.com virtual host is working!</h1>
  </body>
</html>

保存并关闭此文件。现在,您具有测试虚拟主机配置所需的页面。

第四步-创建新的虚拟主机文件

虚拟主机文件是用于指定虚拟主机的实际配置并指示Apache Web服务器如何响应各种域请求的文件。

Apache随附了一个默认的虚拟主机文件,称为000-default.conf,我们可以将其用作起点。我们将其复制以为我们的每个域创建一个虚拟主机文件。

我们将从一个域开始,进行配置,将其复制到第二个域,然后进行一些必要的进一步调整。默认的Ubuntu配置要求每个虚拟主机文件都以结尾.conf

创建第一个虚拟主机文件

首先复制第一个域的文件:

  • sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf

使用root特权在编辑器中打开新文件:

  • sudo nano /etc/apache2/sites-available/example.com.conf

删除注释后,该文件将类似于以下内容:

/etc/apache2/sites-available/example.com.conf
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

在此文件中,我们将为第一个域自定义项目,并添加一些其他指令。此虚拟主机部分与在端口80(默认HTTP端口)上进行的所有请求匹配。

首先,我们需要将ServerAdmin指令更改为网站管理员可以通过其接收电子邮件的电子邮件。

ServerAdmin admin@example.com

此后,我们需要添加两个指令。第一个称为ServerName,建立了应该与此虚拟主机定义匹配的基本域。这很可能是您的域。第二个称为ServerAlias,定义了其他名称,这些名称应该像基本名称一样匹配。这对于匹配您定义的主机很有用,例如www

ServerName example.com
ServerAlias www.example.com

我们需要为虚拟主机文件更改的唯一另一件事是该域的文档根目录位置。我们已经创建了所需的目录,因此我们只需要更改DocumentRoot指令即可反映我们创建的目录:

DocumentRoot /var/www/example.com/public_html

完成后,我们的虚拟主机文件应如下所示:

/etc/apache2/sites-available/example.com.conf
<VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

此时,保存并关闭文件。

复制第一个虚拟主机并自定义第二个域

现在我们已经建立了第一个虚拟主机文件,我们可以通过复制该文件并根据需要对其进行调整来创建第二个虚拟主机文件。

首先复制它:

  • sudo cp /etc/apache2/sites-available/example.com.conf /etc/apache2/sites-available/test.com.conf

在编辑器中以root权限打开新文件:

  • sudo nano /etc/apache2/sites-available/test.com.conf

现在,您需要修改所有信息,以引用您的第二个域。完成后,它应如下所示:

/etc/apache2/sites-available/test.com.conf
<VirtualHost *:80>
    ServerAdmin admin@test.com
    ServerName test.com
    ServerAlias www.test.com
    DocumentRoot /var/www/test.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

完成后保存并关闭文件。

第五步—启用新的虚拟主机文件

现在我们已经创建了虚拟主机文件,我们必须启用它们。Apache包含一些允许我们执行此操作的工具。

我们将使用该a2ensite工具启用我们的每个网站。如果您想了解有关此脚本的更多信息,可以参考a2ensite文档

  • sudo a2ensite example.com.conf
  • sudo a2ensite test.com.conf

接下来,禁用在中定义的默认站点000-default.conf

  • sudo a2dissite 000-default.conf

完成后,您需要重新启动Apache以使这些更改生效并用于systemctl status验证重新启动是否成功。

  • sudo systemctl restart apache2
  • sudo systemctl status apache2

现在应该将服务器设置为可以服务两个网站。

第六步—设置本地主机文件(可选)

如果您没有使用您拥有的实际域名来测试此过程,而是使用了一些示例域,则可以至少通过临时修改hosts本地计算机上的文件来测试此过程的功能。

这将拦截对您配置的域的任何请求,并将它们指向您的VPS服务器,就像DNS系统在使用注册域时一样。不过,这只能在您的本地计算机上工作,并且仅用于测试目的。

请确保您正在本地计算机上执行这些步骤,而不是在VPS服务器上进行操作。您将需要知道计算机的管理密码或以其他方式成为管理组的成员。

如果您使用的是Mac或Linux计算机,请输入以下内容以具有管理权限的方式编辑本地文件:

  • sudo nano /etc/hosts

如果您使用的是Windows计算机,则可以在此处找到有关更改主机文件的说明

您需要添加的详细信息是服务器的公共IP地址,后跟要用于访问该服务器的域。

使用本指南中使用的域,并替换your_server_IP文本的服务器IP ,文件应如下所示:

/ etc / hosts
127.0.0.1   localhost
127.0.1.1   guest-desktop
your_server_IP example.com
your_server_IP test.com

保存并关闭文件。

这将指示任何请求example.comtest.com我们的计算机上,并将它们发送到我们的服务器。如果我们实际上不是这些域的​​所有者,这就是我们想要的,以便测试我们的虚拟主机。

第七步-测试结果

现在,您已经配置了虚拟主机,可以通过在Web浏览器中配置的域来测试设置:

http://example.com

您应该看到一个如下所示的页面:

Apache虚拟主机示例

您还可以访问第二页,并查看为第二个站点创建的文件。

http://test.com

Apache虚拟主机测试

如果这两个站点均按预期工作,则说明您已在同一服务器上成功配置了两个虚拟主机。

如果您调整了家用计算机的主机文件,则在验证配置有效后,可能要删除添加的行。这将防止您的主机文件充满不再需要的条目。

结论

如果继续进行,现在应该有一台服务器来处理两个单独的域名。您可以按照上面概述的步骤制作其他虚拟主机,以扩展此过程。

Apache可以处理的域名数量没有软件限制,因此请随意增加服务器可处理的域名数量。

发表评论

电子邮件地址不会被公开。 必填项已用*标注