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

2023-11-15

介绍

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

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

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

配置的每个域都会将访问者引导到保存该站点信息的特定目录,而不会表明同一服务器还负责其他站点。只要您的服务器可以处理负载,该方案就可以扩展,没有任何软件限制。

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

先决条件

在开始本教程之前,您应该创建一个启用 sudo 的非root user如此处步骤 1-4 中所述。

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

  1. sudo apt-get update
  2. sudo apt-get install阿帕奇2

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

出于本指南的目的,我们的配置将为example.com另一个用于test.com。这些将在整个指南中引用,但您应该在遵循时替换您自己的域或值。

如果您使用虚拟值,我们稍后将展示如何编辑本地主机文件以测试配置。这将允许您从家庭计算机测试您的配置,即使其他访问者无法通过域名访问您的内容。

第 1 步 — 创建目录结构

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

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

每个内these目录,我们将创建一个public_html将保存我们实际文件的文件夹。这为我们的托管提供了一定的灵活性。

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

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

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

第 2 步 — 授予权限

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

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

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

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

  1. sudo chmod -R 755/var/www

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

第 3 步 — 为每个虚拟主机创建演示页面

我们已经有了适当的目录结构。让我们创建一些内容来提供服务。

我们只是为了演示,所以我们的页面会非常简单。我们只是要做一个index.html每个站点的页面。

让我们从example.com。我们可以开辟一个index.html在我们的编辑器中输入以下内容:

  1. 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>

完成后保存并关闭文件。

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

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

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

  1. 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>

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

第 4 步 — 创建新的虚拟主机文件

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

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

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

创建第一个虚拟主机文件

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

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

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

  1. 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>

正如你所看到的,这里没有太多内容。我们将为我们的第一个域自定义此处的项目并添加一些附加指令。此虚拟主机部分匹配any在端口 80(默认 HTTP 端口)上发出的请求。

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

ServerAdmin admin@example.com

之后,我们需要add两个指令。第一个,叫做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>

保存并关闭文件。

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

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

首先复制它:

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

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

  1. 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>

完成后保存并关闭文件。

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

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

我们可以使用a2ensite工具来启用我们的每个站点,如下所示:

  1. sudo a2ensite example.com.conf
  2. sudo a2ensite test.com.conf

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

  1. sudoa2dissite 000-default.conf

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

  1. sudosystemctl 重新启动 apache2

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

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

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

确保您在本地计算机上而不是服务器上执行这些步骤。您需要知道计算机的管理密码或者是管理组的成员。

如果您使用的是 Mac 或 Linux 计算机,请通过键入以下内容以管理权限编辑本地文件:

  1. sudo nano/etc/主机

如果您使用的是 Windows 计算机,您可以查找有关更改主机文件的说明 here.

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

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

/etc/主机
127.0.0.1   localhost
127.0.1.1   guest-desktop
203.0.113.10 example.com
203.0.113.10 test.com

这将引导任何请求example.com and test.com在我们的计算机上并将它们发送到我们的服务器203.0.113.10。如果我们实际上不是这些域的​​所有者,那么为了测试我们的虚拟主机,这就是我们想要的。

保存并关闭文件。

第 7 步 — 测试结果

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

http://example.com

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

Apache virt host example

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

http://test.com

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

Apache virt host test

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

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

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

结论

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Ubuntu 16.04 上设置 Apache 虚拟主机 的相关文章

  • 为什么 HTTP 请求在 Chrome 中陷入挂起状态?

    语言 工具版本 角度 cli 1 2 0 PHP 7 0 8 Zend 表达 2 阿帕奇2 4 23 铬65 0 3325 181 Windows 7的 Issue 我有一个 Angular2 应用程序 它使用 PHP 应用程序作为所有 X
  • 如何调试 Apache mod_rewrite

    我对 mod rewrite 有两个主要问题 当我的规则无效时 不会报告任何有意义的错误 To reliably test each modification I have to erase Google Chrome s cache Th
  • 同一服务器,SSL 和非 SSL

    Apache 2 x 中是否可以在同一服务器上同时运行 SSL 协议和非 SSL 协议 所以如果我访问http example com 非 SSL 和https example com SSL 它们都可用 如果是这样 我需要创建一个虚拟主机
  • mod_fcgid + PHP + apache 锁定

    我正在运行一个相当典型的 LAMP 堆栈 其中 PHP 通过 mod fcgid 运行 考虑到服务器收到的流量 我认为服务器处于 高负载 状态 存在一个间歇性问题 当访问依赖 PHP 的站点时 Apache 报告所有连接都处于 正在发送内容
  • ProxyPass、ProxyReverse 与 AJP

    我目前有一个 Tomcat Apache HTTP 服务器设置来为我的 Java servlet 提供服务 ProxyPass myservice http localhost 8080 myservice ProxyPassRervers
  • 在 Java Web 应用程序中处理 X-FORWARDED-PROTO 标头

    任何人都可以指导我与X 转发 原型 https developer mozilla org en US docs Web HTTP Headers X Forwarded Proto部署到 Apache Tomcat 的 Java Web
  • 在 Apache 服务器上处理 React Router

    我在重定向 Apache 服务器上 React 生成的 URL 路径的 404 错误时遇到问题 设想 假设我有一些由 React Router 生成的 URL www somewebsite com apps Problem 如果最终用户单
  • Vagrant 的端口转发不起作用[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我在最后遇到了一个小问题入门指南vagrant http vagrantup com docs getting started ports html
  • 如何在应用程序级别管理只读数据库连接

    我们使用的是Java Spring Ibatis MySql 有没有办法利用这些技术在应用程序级别管理只读连接 我希望在只读 MySql 用户的基础上添加额外的保护层 如果 BasicDataSource 或 SqlMapClientTem
  • 一个文件夹中的多个 htaccess 文件,还是条件 AuthType Basic?

    我在本地服务器和实时服务器上使用相同的 htaccess 文件 并希望在测试服务器上使用相同的文件 以使代码管理更容易 目前 虽然我必须有一个不同的文件 因为我的测试服务器具有 htaccess 密码访问权限 AuthType Basic
  • 使用 Nginx 或 Apache 来提供动态内容? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Django 与 mod_wsgi 在 apache - 500 错误:Authtype 未设置?

    尝试在 Dreamhost 上部署我的第一个 django 站点 我的这个工作正常 然后我不确定我做了什么让它停止工作 这是错误消息 crit client 74 72 99 26 configuration error couldn t
  • 将子域重定向到 CakePHP 操作

    背景 我有一个 CakePHP 应用程序 位于 m 我想写一个根级别的 htaccess文件 它将重定向网站的 子域 作为操作的参数 例如 我想编写一个重写规则 这将导致像这样的重定向 http mysite myserver com ht
  • 保存到服务器后,隐藏字符“\u0”添加到文件中

    我正在使用 Apache 服务器为 Web 开发网站提供服务 这样我就可以不断保存和编辑文件 我使用 Gulp for Sass 来连接和丑化 css 和 js 文件 一个月前 我的 js 和 css 文件遇到问题 似乎在文件下面添加了随机
  • 配置 shiro.ini 以进行 JDBC 连接

    作为我新的一年学习新技术计划的一部分 我开始尝试使用 Apache Shiro 安全框架 我设法让基本示例正常工作 该示例将用户名 密码和角色存储在 shiro ini 文件中 但是当我修改 shiro ini 文件以使用 JDBC 时 它
  • htaccess - XAMPP 上的互联网服务器错误 500 [已关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我尝试在 XAMPP 上运行脚本 但收到 互联网服务器错误 500 在实时服务器上运行时效果很好 我认为这是一个 htaccess 错误 htacce
  • XAMPP apache 服务器在 Skype 安装后未启动

    我收到以下控制台日志 1 14 33 PM apache Possible problem detected 1 14 33 PM apache Port 80 in use by c program files x86 skype pho
  • Ubuntu 12.04 上的 PHP 从 5.3 升级到 php 5.6

    我正在按照本教程将 php 从版本 5 3 升级到 5 6 http phpave com upgrade php 53 to php 56 on ubuntu 1204 lts http phpave com upgrade php 53
  • 使用 dockerfile 在 docker 中安装 mongodb 驱动

    我有一个 mongodb docker 容器 我需要另一个安装了 php 和 apache 的 docker 容器 我想从这个容器运行一个 php 脚本并将一些数据发送到 mongodb 容器以将数据保存在 mongodb 数据库中 所以我
  • 设置 Silex Bootstrap 时出现 Apache 错误:无法检查 htaccess 文件

    我正在尝试使用 Silex Bootstrap 建立一个网站 我已将它与其他 Web 项目一起放在我的文件夹中 并更改了 Apache 配置中的 DocumentRoot

随机推荐

  • Linux 中的 df 命令(检查磁盘空间)

    我的硬盘还剩多少空间 是否有足够的可用磁盘空间来下载大文件或安装新应用程序 在 Linux 和 Unix 操作系统上 您可以使用df命令获取有关系统磁盘空间使用情况的详细报告 使用 df 命令 的一般语法为df命令如下 df OPTIONS
  • 如何在 CentOS 8 上安装 Node.js 和 npm

    Node js 是一个基于 Chrome JavaScript 构建的跨平台 JavaScript 运行时环境 旨在在服务器端执行 JavaScript 代码 使用 Node js 您可以构建可扩展的网络应用程序 npm 是 Node Pa
  • 如何在 Debian 9 上安装 Webmin

    Webmin是一个用于管理 Linux 服务器的开源 Web 控制面板 使用 Webmin 您可以管理系统用户 组 磁盘配额以及配置最流行的服务 包括 Web ssh ftp 电子邮件和数据库服务器 本教程介绍如何在 Debian Linu
  • 如何在 Debian 11 上为专用连接设置 Squid 代理

    介绍 代理服务器是一种服务器应用程序 充当最终用户和互联网资源之间的网关 通过代理服务器 最终用户能够出于多种目的控制和监视其 Web 流量 包括隐私 安全和缓存 例如 您可以使用代理服务器从与您自己的 IP 地址不同的 IP 地址发出 W
  • 如何在 Ubuntu 16.04 上安装 MySQL

    介绍 MySQL是一个开源数据库管理系统 通常作为流行的一部分安装LAMP Linux Apache MySQL PHP Python Perl 堆栈 它使用关系数据库和 SQL 结构化查询语言 来管理其数据 简短版本的安装很简单 更新您的
  • Java IO 教程

    Java提供了几个类java io用于处理文本 流数据和文件系统的包 我最近提供了几个有关 Java 文件和 Java IO 的示例 这篇文章是所有 Java IO 文章的索引 Java IO 如何在 Java 中创建新文件在这篇文章中 您
  • Java Stream Collect() 方法示例

    Java Streamcollect 对流的元素执行可变归约操作 这是终端操作 什么是可变约简操作 可变归约操作处理流元素 然后将其累积到可变结果容器中 处理元素后 组合函数将合并所有结果容器以创建结果 Java Stream Collec
  • 快速初始化()

    在本 Swift 教程中 我们将讨论一个重要的概念 即 Swift init 或 Swift 初始化 初始化是当我们创建某种类型的实例时发生的事情 快速初始化 初始化是准备类 结构或枚举的实例以供使用的过程 此过程涉及为该实例上的每个存储属
  • 如何在 Debian Wheezy 上使用 Postfix 安装和配置 DKIM

    介绍 对于大多数邮件服务器管理员来说 被错误地标记为垃圾邮件发送者所带来的挫败感并不奇怪 通过排除服务器受损的可能性 错误标记通常是由以下原因之一引起的 该服务器是一个开放的邮件中继 发件人或服务器的 IP 地址已列入黑名单 服务器没有完全
  • Linux/Unix 中的 AWK 命令

    AWK 适用于模式搜索和处理 该脚本运行以搜索一个或多个文件以识别匹配模式以及所述模式是否执行特定任务 在本指南中 我们将了解 AWK Linux 命令并了解它的功能 AWK 可以执行哪些操作 逐行扫描文件 将每个输入行拆分为字段 将输入行
  • 如何在 Python 中将字符串转换为日期时间或时间对象

    介绍 蟒蛇datetime and time模块均包括strptime 将字符串转换为对象的类方法 在本文中 您将使用strptime 将字符串转换为datetime and struct time 对象 将字符串转换为datetime对象
  • 如何在 Ubuntu 18.04 上使用 Python 3 设置 Jupyter Notebook

    介绍 Jupyter笔记本是一个开源 Web 应用程序 可让您创建和共享交互式代码 可视化等 该工具可与多种编程语言一起使用 包括 Python Julia R Haskell 和 Ruby 它通常用于处理数据 统计建模和机器学习 本教程将
  • 了解 Vue.js 生命周期挂钩

    介绍 生命周期挂钩是了解您正在使用的库如何在幕后工作的窗口 生命周期钩子允许您知道组件何时被创建 添加到 DOM 更新或销毁 本文将向您介绍 Vue js 中的创建 安装 更新和销毁钩子 先决条件 要完成本教程 您需要 熟悉 Vue js
  • Java 单例类中的线程安全

    Singleton 是最广泛使用的创建型设计模式之一 用于限制应用程序创建的对象 如果是在多线程环境中使用 那么单例类的线程安全性就非常重要 在现实应用程序中 数据库连接或企业信息系统 EIS 等资源是有限的 应明智地使用以避免任何资源紧缩
  • Fail2Ban 如何保护 Linux 服务器上的服务

    介绍 SSH 是连接云服务器的事实上的方法 它耐用且可扩展 随着新的加密标准的开发 它们可用于生成新的 SSH 密钥 确保核心协议保持安全 然而 没有任何协议或软件堆栈是完全万无一失的 SSH 在互联网上如此广泛的部署意味着它代表了一种非常
  • 如何在运行 Ubuntu 的 VPS 上安装和使用 Composer

    Status 已弃用 本文介绍不再受支持的 Ubuntu 版本 如果您当前运行的服务器运行 Ubuntu 12 04 我们强烈建议您升级或迁移到受支持的 Ubuntu 版本 升级到Ubuntu 14 04 从 Ubuntu 14 04 升级
  • 如何在 Rocky Linux 9 上安装 Node.js

    介绍 Node js是用于服务器端编程的 JavaScript 运行时 它允许开发人员使用 JavaScript 创建可扩展的后端功能 这是许多人在基于浏览器的 Web 开发中已经熟悉的语言 在本指南中 您将了解在 Rocky Linux
  • Java 堆空间与堆栈 - Java 中的内存分配

    不久前我写了几篇关于Java 垃圾收集 and Java 是按值传递 之后我收到了很多电子邮件来解释Java堆空间 Java堆栈内存 Java中的内存分配它们之间有什么区别 您会在 Java Java EE 书籍和教程中看到很多对堆和堆栈内
  • Spring WebFlux - Spring 响应式编程

    Spring WebFlux是Spring 5中引入的新模块 Spring WebFlux是Spring框架中向反应式编程模型迈出的第一步 Spring 响应式编程 如果您是反应式编程模型的新手 那么我强烈建议您阅读以下文章来了解反应式编程
  • 如何在 Ubuntu 16.04 上设置 Apache 虚拟主机

    介绍 Apache Web 服务器是在互联网上提供 Web 内容的最流行的方式 它占互联网上所有活跃网站的一半以上 并且非常强大和灵活 Apache 将其功能和组件分解为可以独立定制和配置的单独单元 描述单个站点或域的基本单位称为virtu