前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Ubuntu 16.04上设置Apache虚拟主机

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

原创
作者头像
物花无语
修改2018-10-25 11:12:48
2.2K0
修改2018-10-25 11:12:48
举报

介绍

Apache Web服务器是在互联网上提供Web内容的最流行方式。它占互联网上所有活跃网站的一半以上,并且非常强大和灵活。

Apache将其功能和组件分解为可以单独定制和配置的单个单元。描述单个站点或域的基本单元称为一个 virtual host

这些指定允许管理员使用匹配机制使用一台服务器从单个接口或IP托管多个域或站点。这与想要在单个VPS上托管多个站点的任何人相关。

配置的每个域都会将访问者定向到保存该站点信息的特定目录,从不指示同一服务器也负责其他站点。只要您的服务器可以处理负载,此方案就可以在没有任何软件限制的情况下进行扩展。

在本指南中,我们将向您介绍如何在Ubuntu 16.04 VPS上设置Apache虚拟主机。在此过程中,您将了解如何根据所请求的域向不同的访问者提供不同的内容。

先决条件

在开始本教程之前,您应该创建一个非root用户,没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器

您还需要安装Apache才能完成这些步骤。如果您还没有这样做,可以通过apt-get来用以下方式在服务器上安装Apache :

代码语言:javascript
复制
sudo apt-get update
sudo apt-get install apache2

完成这些步骤后,我们就可以开始了。

对于本指南的目的,我们会为example.comtest.com各配置一个虚拟主机。这些将在整个指南中引用,但您应该在跟随时替换您自己的域或值。

如果你没有域名,建议您先去这里注册一个域名

稍后我们将展示如何编辑本地主机文件,以便在使用虚拟值时测试配置。这样您就可以在家用计算机上测试配置,即使您的内容无法通过域名提供给其他访问者。

第一步 - 创建目录结构

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

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

在每个的这些目录中,我们将创建一个将容纳我们的实际文件的public_html文件夹。这为我们的托管提供了一些灵活性。

例如,对于我们的网站,我们将创建这样的目录:

代码语言:javascript
复制
sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html

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

第二步 - 授予权限

现在我们有了文件的目录结构,但它们归root用户所有。如果我们希望我们的常规用户能够修改我们的Web目录中的文件,我们可以通过这样做来更改所有权:

代码语言:javascript
复制
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目录及其包含的所有文件和文件夹进行读取访问,以便可以正确地提供页面:

代码语言:javascript
复制
sudo chmod -R 755 /var/www

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

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

我们有我们的目录结构。让我们创建一些服务内容。

我们正在进行演示,因此我们的页面将非常简单。我们只是为每个网站制作一个index.html页面。

让我们从example.com开始吧。我们可以通过键入以下内容在编辑器中打开index.html文件:

代码语言:javascript
复制
nano /var/www/example.com/public_html/index.html

在此文件中,创建一个简单的HTML文档,指示它所连接的站点。我的文件看起来像这样:

代码语言:javascript
复制
<html>
  <head>
    <title>Welcome to Example.com!</title>
  </head>
  <body>
    <h1>Success!  The example.com virtual host is working!</h1>
  </body>
</html>

完成后保存并关闭文件。

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

代码语言:javascript
复制
cp /var/www/example.com/public_html/index.html /var/www/test.com/public_html/index.html

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

代码语言:javascript
复制
nano /var/www/test.com/public_html/index.html
代码语言:javascript
复制
<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结尾。

创建第一个虚拟主机文件

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

代码语言:javascript
复制
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf

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

代码语言:javascript
复制
sudo nano /etc/apache2/sites-available/example.com.conf

该文件看起来像这样(我在这里删除了注释,使文件更加平易近人):

代码语言:javascript
复制
<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指令更改为网站管理员可以通过电子邮件接收的电子邮件。

代码语言:javascript
复制
ServerAdmin admin@example.com

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

代码语言:javascript
复制
ServerName example.com
ServerAlias www.example.com

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

代码语言:javascript
复制
DocumentRoot /var/www/example.com/public_html

总的来说,我们的virtualhost文件应如下所示:

代码语言:javascript
复制
<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>

保存并关闭文件。

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

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

首先复制它:

代码语言:javascript
复制
sudo cp /etc/apache2/sites-available/example.com.conf /etc/apache2/sites-available/test.com.conf

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

代码语言:javascript
复制
sudo nano /etc/apache2/sites-available/test.com.conf

您现在需要修改所有信息以引用您的第二个域。完成后,它可能看起来像这样:

代码语言:javascript
复制
<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工具启用我们的每个网站,如下所示:

代码语言:javascript
复制
sudo a2ensite example.com.conf
sudo a2ensite test.com.conf

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

代码语言:javascript
复制
sudo a2dissite 000-default.conf

完成后,需要重新启动Apache才能使这些更改生效:

代码语言:javascript
复制
sudo systemctl restart apache2

在其他文档中,您还可以使用以下service命令查看示例:

代码语言:javascript
复制
sudo service apache2 restart

这个命令仍然可以工作,但是它可能不会给你以前在其他系统上看到的输出,因为它现在是systemd的包装器的systemctl

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

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

这将拦截您配置的域的任何请求并将它们指向您的VPS服务器,就像DNS系统在您使用注册域时所做的那样。这只能在您的计算机上运行,并且仅用于测试目的。

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

如果您使用的是Mac或Linux计算机,请键入以下命令编辑具有管理权限的本地文件:

代码语言:javascript
复制
sudo nano /etc/hosts

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

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

对于我在本指南中使用的域,假设我的VPS IP地址是111.111.111.111,我可以将以下行添加到hosts文件的底部:

代码语言:javascript
复制
127.0.0.1   localhost
127.0.1.1   guest-desktop
111.111.111.111 example.com
111.111.111.111 test.com

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

保存并关闭文件。

第七步 - 测试你的结果

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

代码语言:javascript
复制
http://example.com

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

同样,如果您可以访问第二页:

代码语言:javascript
复制
http://test.com

您将看到为第二个站点创建的文件:

如果这两个站点都运行良好,则您已在同一服务器上成功配置了两个虚拟主机。

如果您调整了家用计算机的主机文件,则可能需要删除现在添加的已验证配置有效的行。这将阻止您的hosts文件填充实际不必要的条目。

如果您需要长期访问,请考虑为您需要的每个站点购买域名,并将其设置为指向您的VPS服务器

结论

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

Apache可以处理的域名数量没有软件限制,因此可以随意使用服务器能够处理的域名数量。

更多Ubuntu 教程请前往腾讯云+社区学习更多知识。


参考文献:《How To Set Up Apache Virtual Hosts on Ubuntu 16.04》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 先决条件
  • 第一步 - 创建目录结构
  • 第二步 - 授予权限
  • 第三步 - 为每个虚拟主机创建演示页面
  • 第四步 - 创建新的虚拟主机文件
    • 创建第一个虚拟主机文件
      • 复制第一个虚拟主机并自定义第二个域
      • 第五步 - 启用新的虚拟主机文件
      • 第六步 - 设置本地主机文件(可选)
      • 第七步 - 测试你的结果
      • 结论
      相关产品与服务
      轻量应用服务器
      轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门开源软件打包实现一键构建应用,提供极简上云体验。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档