Apache Web服务器是在互联网上提供Web内容的最流行方式。它占互联网上所有活跃网站的一半以上,并且非常强大和灵活。
Apache将其功能和组件分解为可以单独定制和配置的单个单元。描述单个站点或域的基本单元称为一个 virtual host
。
这些指定允许管理员使用匹配机制使用一台服务器从单个接口或IP托管多个域或站点。这与想要在单个VPS上托管多个站点的任何人相关。
配置的每个域都会将访问者定向到保存该站点信息的特定目录,从不指示同一服务器也负责其他站点。只要您的服务器可以处理负载,此方案就可以在没有任何软件限制的情况下进行扩展。
在本指南中,我们将向您介绍如何在Ubuntu 16.04 VPS上设置Apache虚拟主机。在此过程中,您将了解如何根据所请求的域向不同的访问者提供不同的内容。
在开始本教程之前,您应该创建一个非root用户,没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。
您还需要安装Apache才能完成这些步骤。如果您还没有这样做,可以通过apt-get
来用以下方式在服务器上安装Apache :
sudo apt-get update
sudo apt-get install apache2
完成这些步骤后,我们就可以开始了。
对于本指南的目的,我们会为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提供的域名。
现在我们有了文件的目录结构,但它们归root用户所有。如果我们希望我们的常规用户能够修改我们的Web目录中的文件,我们可以通过这样做来更改所有权:
sudo chown -R $USER:$USER /var/www/example.com/public_html
sudo chown -R $USER:$USER /var/www/test.com/public_html
当您按Enter键时,该$USER
变量将采用您当前登录的用户的值。通过这样做,我们的常规用户现在拥有我们将存储内容的public_html
子目录。
我们还应该稍微修改我们的权限,以确保允许对一般Web目录及其包含的所有文件和文件夹进行读取访问,以便可以正确地提供页面:
sudo chmod -R 755 /var/www
您的Web服务器现在应该具有提供内容所需的权限,并且您的用户应该能够在必要的文件夹中创建内容。
我们有我们的目录结构。让我们创建一些服务内容。
我们正在进行演示,因此我们的页面将非常简单。我们只是为每个网站制作一个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>
完成后保存并关闭文件。
我们可以通过输入以下内容复制此文件以用作第二个站点的基础:
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
<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
该文件看起来像这样(我在这里删除了注释,使文件更加平易近人):
<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
总的来说,我们的virtualhost文件应如下所示:
<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
您现在需要修改所有信息以引用您的第二个域。完成后,它可能看起来像这样:
<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
工具启用我们的每个网站,如下所示:
sudo a2ensite example.com.conf
sudo a2ensite test.com.conf
接下来,禁用000-default.conf
定义的默认站点:
sudo a2dissite 000-default.conf
完成后,需要重新启动Apache才能使这些更改生效:
sudo systemctl restart apache2
在其他文档中,您还可以使用以下service
命令查看示例:
sudo service apache2 restart
这个命令仍然可以工作,但是它可能不会给你以前在其他系统上看到的输出,因为它现在是systemd的包装器的systemctl
。
如果您没有使用您拥有的实际域名来测试此过程并且一直在使用某些示例域,则至少可以通过临时修改本地计算机上的hosts
文件来测试此过程的功能。
这将拦截您配置的域的任何请求并将它们指向您的VPS服务器,就像DNS系统在您使用注册域时所做的那样。这只能在您的计算机上运行,并且仅用于测试目的。
确保您在本地计算机上运行这些步骤而不是VPS服务器。您需要知道计算机的管理密码或以其他方式成为管理组的成员。
如果您使用的是Mac或Linux计算机,请键入以下命令编辑具有管理权限的本地文件:
sudo nano /etc/hosts
如果您使用的是Windows计算机,则可以在此处找到有关更改主机文件的说明。
您需要添加的详细信息是VPS服务器的公共IP地址,后跟您要用于访问该VPS的域。
对于我在本指南中使用的域,假设我的VPS IP地址是111.111.111.111
,我可以将以下行添加到hosts文件的底部:
127.0.0.1 localhost
127.0.1.1 guest-desktop
111.111.111.111 example.com
111.111.111.111 test.com
这将指示任何请求我们的计算机上的example.com
和test.com
,并将它们在发送到位于我们的服务器的111.111.111.111
。如果我们实际上不是这些域的所有者以便测试我们的虚拟主机,那么这就是我们想要的。
保存并关闭文件。
现在您已配置虚拟主机,您可以通过转到在Web浏览器中配置的域来轻松测试您的设置:
http://example.com
你应该看到一个如下所示的页面:
同样,如果您可以访问第二页:
http://test.com
您将看到为第二个站点创建的文件:
如果这两个站点都运行良好,则您已在同一服务器上成功配置了两个虚拟主机。
如果您调整了家用计算机的主机文件,则可能需要删除现在添加的已验证配置有效的行。这将阻止您的hosts文件填充实际不必要的条目。
如果您需要长期访问,请考虑为您需要的每个站点购买域名,并将其设置为指向您的VPS服务器
如果您继续,您现在应该有一个服务器处理两个单独的域名。您可以按照上面概述的步骤扩展此过程,以创建其他虚拟主机。
Apache可以处理的域名数量没有软件限制,因此可以随意使用服务器能够处理的域名数量。
更多Ubuntu 教程请前往腾讯云+社区学习更多知识。
参考文献:《How To Set Up Apache Virtual Hosts on Ubuntu 16.04》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。