如何在 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 虚拟主机 的相关文章

  • Google App Store 警告 - 您应该尽快升级到 Apache Cordova 3.5.1 或更高版本

    我收到了一封来自 Google Play 商店的关于我的 Android 应用程序的电子邮件 这是一个通知 表明您的 com mydomain myapp 是基于 包含安全漏洞的 Apache Cordova 版本 这 包括高严重性跨应用程
  • 包含哈希标记的目标的 Apache 重写规则

    我正在尝试发出重定向 其中目标包含片段标识符部分 我尝试过这个规则 RewriteRule foo bar cgi script foobar 1 2 R L 但是 那 被转换成 23并且 Web 应用程序无法正确解析此 url 我怎样才能
  • PHP 编译器 openssl 错误

    在提问之前 我必须说我已经tried堆栈和其他地方的每个类似问题都失败了 我无法使用composer因为这个错误 requires ext openssl gt the requested PHP extension openssl is
  • Apache 2.2 重定向到 SSL *然后* 进行身份验证(使用解决方案 < 但这是废话吗?)

    似乎是 apache 的地方 所以这里 老问题 如何重定向 HTTP gt HTTPS 然后且仅当 HTTPS 时才进行身份验证 哦 我希望其中的大部分内容都在一个片段中 可以包含在多个 或 块中 因此没有虚拟主机级别的基于随机路径的重写
  • rewrite_mod 已启用,但 .htaccess 不起作用

    我在 Amazon EC2 的 ubuntu 12 04 中使用 apache 2 2 我使用启用了 mod rewrite sudo a2enmod rewrite 并能够看到 apache2ctl M 现在我编写了以下 htaccess
  • XAMPP 中的根路径

    我遇到这个问题已经有一段时间了 并且广泛寻找答案但没有成功 img src images test jpg 从 根路径 在我的例子中是在 LAMP 中的生产中 获取图像 htdocs images test jpg 无论是从 htdocs
  • 结束 perl 脚本而不等待系统调用返回

    我在 Linux Ubuntu 14 04 上运行一个简单的 apache Web 服务器 并使用 perl CGI 脚本处理一些请求 该脚本使用以下命令启动系统命令system函数 但我希望它立即返回 无论系统调用的结果如何 我一直在传递
  • Apache 2 gzip json 默认输出吗?

    我正在使用此 PHP 代码进行 json 输出 apache默认gzip吗 或者 我该如何检查才能确定 header Content type application json header Cache Control max age 0
  • Apache httpd 上的选择性代理端口转发

    我正在尝试将 WordPress 集成到在 Nodejs 服务器上运行的网站中 并启用 Apache Httpd 端口转发 以将所有请求从 80 端口转发到 Nodejs 端口 9000 我已将 WordPress 安装到 Apache h
  • 如何从Python请求库正确返回http响应(想要一个Python反向代理)

    这个问题继续自here https stackoverflow com questions 48635552 how to programmatically communicate with apache 我想创建一个反向代理 它允许我托管
  • Apache2 重写查询字符串转义两次

    在虚拟主机配置文件中使用此规则会导致查询参数的双重转义 RewriteEngine On RewriteCond HTTPS off RewriteRule https HTTP HOST REQUEST URI 例如 http examp
  • 在 Windows 中启用 Apache 中的 mod_headers

    我正在尝试配置访问控制允许来源在 Apache 中允许某些域 下面是我的httpd配置
  • Django + WSGI:刷新问题?

    我正在开发一个 Django 网站 我在实时服务器上进行所有更改 只是因为这样更容易 问题是 它似乎时不时地喜欢缓存我正在处理的 py 文件之一 有时 如果我频繁点击刷新 它会在页面的旧版本和新版本之间来回切换 我的设置或多或少类似于 Dj
  • 我怎样才能发现并生存被“Slashdotted”?

    在异常高的流量高峰中生存的好方法是什么 我的想法是 在某些触发点上 我的网站应该暂时切换到 低带宽 模式 切换到基本 HTML 页面 最少的图形 禁用可能会给数据库带来不必要负载的小部件 等等 我的想法是 监控CPU使用率 监控带宽 监控请
  • MySQL 与 PHP 的连接无法正常工作

    这是我的情况 我正在尝试使用 Apache 服务器上的 PHP 文件连接到 MySQL 数据库 现在 当我从终端运行 PHP 时 我的 PHP 可以连接到 MySQL 数据库 使用 php f file php 但是当我从网页执行它时 它只
  • Apache PHP/OSX Mavericks: - 无法打开流:打开的文件太多

    我最近升级到 OSX Mavericks 从那时起 我开始在我的开发计算机上收到上述错误 代码中没有明显的问题 它是自动生成的Yii http www yiiframework com 示例应用程序 Mavericks 升级过程中发生的事情
  • 如何在 Java 中使用 HTML 解析器和 Apache Tika 来提取所有 HTML 标签?

    我下载了 tika core 和 tika parser 库 但找不到将 HTML 文档解析为字符串的示例代码 我必须删除网页源的所有 html 标签 我能做些什么 如何使用 Apache Tika 进行编码 您想要 html 文件的纯文本
  • 使用 Apache 在本地网络上托管网站

    我目前在我的机器上使用 Apache 在本地测试 PHP 网站 我只是想知道如何允许连接到本地网络的计算机访问本地计算机上托管的网站 如果仅通过 IP 本地网络上的计算机应该能够访问您的计算机 假设您没有防火墙阻止端口 80 HTTP 完成
  • 运行没有扩展名的 PHP 页面

    我想在 apache Web 服务器上运行我的 PHP 网页 而不需要 php扩大 所以我添加了以下代码 RewriteEngine on RewriteBase Rewritecond REQUEST URI NC RewriteRule
  • URL 中的 %2F 中断并且未引用所需的 .php 文件 [重复]

    这个问题在这里已经有答案了 我需要将 作为变量作为 URL 的一部分传递 我的结构如下所示 www domain com listings page 1 city Burnaby South type Townhome bedroom 2

随机推荐

  • 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