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

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

简介

Apache Web 服务器是一种流行的在互联网上提供网站服务的方法。截至2019年,据估计,它为所有活跃网站的29%提供服务,并为开发人员提供了强大的灵活性。使用 Apache,管理员可以设置一个服务器来托管多个域或站点,通过使用匹配系统,这些域或站点可以从单个接口或 IP 进行访问。

使用 Apache 配置的每个域或单独的站点(称为“虚拟主机”)将访问者定向到保存该站点信息的特定目录,而不会指示同一服务器还负责其他站点。只要您的服务器能够处理负载,这种方案就可以扩展,没有任何软件限制。描述单个站点或域的基本单元称为“虚拟主机”。

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

先决条件

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

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

sudo apt update
sudo apt install apache2

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

在本指南中,我们的配置将为 example.comtest.com 创建虚拟主机。在本指南中将引用这些域,但您应该在跟随指南时用您自己的域或值进行替换。

如果您使用的是 DigitalOcean,您可以通过阅读产品文档《如何添加域》来学习如何设置域。对于其他提供商,请参考其相关产品文档。如果您目前没有可用的域,可以使用测试值。

稍后我们将展示如何编辑您的本地 hosts 文件以测试配置,如果您使用测试值,这将允许您从家用计算机验证配置,尽管您的内容对其他访问者不会通过域名可用。

步骤一 — 创建目录结构

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

我们的文档根目录(Apache 用于查找要提供的内容的顶级目录)将设置为 /var/www 目录下的各个目录。我们将在这里为我们计划创建的每个虚拟主机创建一个目录。

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

例如,对于我们的站点,我们将创建以下目录。如果您使用实际域或替代值,请用这些值替换高亮显示的文本。

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

红色部分代表我们希望从我们的 VPS 服务的域名。

步骤二 — 授予权限

现在我们已经为我们的文件创建了目录结构,但它们是由我们的根用户拥有的。如果我们希望我们的常规用户能够修改我们的网页目录中的文件,我们可以通过执行以下操作更改所有权:

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 子目录。

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

sudo chmod -R 755 /var/www

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

步骤三 — 为每个虚拟主机创建演示页面

现在我们已经准备好了目录结构。让我们创建一些内容来提供服务。

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

让我们从 example.com 开始。我们可以在文本编辑器中打开一个 index.html 文件,这里我们将使用 nano:

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>

完成后保存并关闭文件(在 nano 中,按 CTRL + X 然后 Y 然后 ENTER)。

我们可以通过输入以下命令将此文件复制为我们第二个站点的基础:

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@localhostDocumentRoot /var/www/htmlErrorLog ${APACHE_LOG_DIR}/error.logCustomLog ${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 *:80>ServerAdmin admin@example.comServerName example.comServerAlias www.example.comDocumentRoot /var/www/example.com/public_htmlErrorLog ${APACHE_LOG_DIR}/error.logCustomLog ${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.comServerName test.comServerAlias www.test.comDocumentRoot /var/www/test.com/public_htmlErrorLog ${APACHE_LOG_DIR}/error.logCustomLog ${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 文件(可选)

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

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

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

如果您使用的是 Mac 或 Linux 计算机,请使用管理员权限编辑本地文件:

[本地环境]
sudo nano /etc/hosts

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

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

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

[本地环境]127.0.0.1   localhost
127.0.1.1   guest-desktop
your_server_IP example.com
your_server_IP test.com

保存并关闭文件。

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

第七步 — 测试你的结果

现在你已经配置好了虚拟主机,你可以通过在浏览器中输入你配置的域名来测试你的设置:

http://example.com

你应该会看到一个类似这样的页面:

!Apache虚拟主机示例

你也可以访问你的第二个页面,查看你为第二个站点创建的文件。

http://test.com

!Apache虚拟主机测试

如果这两个站点都按预期工作,那么你已经成功在同一台服务器上配置了两个虚拟主机。

如果你修改了你家庭电脑的 hosts 文件,你可能希望在验证了你的配置后删除你添加的行。这样可以防止你的 hosts 文件被填满了不再需要的条目。

如果你需要长期访问这些站点,考虑为你需要的每个站点添加一个域名,并设置它指向你的服务器。

结论

如果你跟着操作,现在你应该有一个单一的服务器处理两个独立的域名。你可以通过按照我们上面概述的步骤来扩展这个过程,以创建额外的虚拟主机。

Apache可以处理的域名数量没有软件限制,所以可以根据你的服务器的处理能力自由地创建任意数量的虚拟主机。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/62677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Leetcode Top 100】142. 环形链表 II

问题背景 给定一个链表的头节点 h e a d head head&#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 n u l l null null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 n e x t next next 指针再次到达&#xff0c;则链表中存在环。 为了…

「网络安全入门」什么是网络安全

如今&#xff0c;组织的信息系统和数据面临着许多威胁。而人们了解网络安全的所有基本要素是应对这些威胁的第一步。 网络安全是确保信息完整性、机密性和可用性(ICA)的做法。它代表了应对硬盘故障、断电事故&#xff0c;以及来自黑客或竞争对手攻击等防御和恢复能力。而后者包…

通讯专题4.1——CAN通信之计算机网络与现场总线

从通讯专题4开始&#xff0c;来学习CAN总线的内容。 为了更好的学习CAN&#xff0c;先从计算机网络与现场总线开始了解。 1 计算机网络体系的结构 在我们生活当中&#xff0c;有许多的网络&#xff0c;如交通网&#xff08;铁路、公路等&#xff09;、通信网&#xff08;电信、…

深度学习模型:LSTM (Long Short-Term Memory) - 长短时记忆网络详解

一、引言 在深度学习领域&#xff0c;循环神经网络&#xff08;RNN&#xff09;在处理序列数据方面具有独特的优势&#xff0c;例如语音识别、自然语言处理等任务。然而&#xff0c;传统的 RNN 在处理长序列数据时面临着严重的梯度消失问题&#xff0c;这使得网络难以学习到长…

算法笔记:力扣24. 两两交换链表中的节点

思路&#xff1a; 本题最简单的就是通过递归的形式去实现 class Solution {public ListNode swapPairs(ListNode head) {if(head null || head.next null){return head;}ListNode next head.next;head.next swapPairs(next.next);next.next head;return next;} } 对于链…

ehr系统建设方案,人力资源功能模块主要分为哪些,hrm平台实际案例源码,springboot人力资源系统,vue,JAVA语言hr系统(源码)

eHR人力资源管理系统&#xff1a;功能强大的人力资源管理工具 随着企业规模的不断扩大和业务需求的多样化&#xff0c;传统的人力资源管理模式已无法满足现代企业的需求。eHR人力资源管理系统作为一种先进的管理工具&#xff0c;能够为企业提供高效、准确、实时的人力资源管理。…

【Android】从事件分发开始:原理解析如何解决滑动冲突

【Android】从事件分发开始&#xff1a;原理解析如何解决滑动冲突 文章目录 【Android】从事件分发开始&#xff1a;原理解析如何解决滑动冲突Activity层级结构浅析Activity的setContentView源码浅析AppCompatActivity的setContentView源码 触控三分显纷争&#xff0c;滑动冲突…

OGRE 3D----2. QGRE + QQuickView

将 OGRE(面向对象图形渲染引擎)集成到使用 QQuickView 的 Qt Quick 应用程序中,可以在现代灵活的 UI 框架中提供强大的 3D 渲染功能。本文将指导您如何在 QQuickView 环境中设置 OGRE。 前提条件 在开始之前,请确保您已安装以下内容: Qt(版本 5.15 )OGRE(版本14.2.5)…

GAGAvatar: Generalizable and Animatable Gaussian Head Avatar 学习笔记

1 Overall GAGAvatar&#xff08;Generalizable and Animatable Gaussian Avatar&#xff09;&#xff0c;一种面向单张图片驱动的可动画化头部头像重建的方法&#xff0c;解决了现有方法在渲染效率和泛化能力上的局限。 旋转参数 现有方法的局限性&#xff1a; 基于NeRF的方…

论文笔记-WWW2024-ClickPrompt

论文笔记-WWW2024-ClickPrompt: CTR Models are Strong Prompt Generators for Adapting Language Models to CTR Prediction ClickPrompt: CTR模型是大模型适配CTR预测任务的强大提示生成器摘要1.引言2.预备知识2.1传统CTR预测2.2基于PLM的CTR预测 3.方法3.1概述3.2模态转换3.…

基于若依框架和Vue2 + Element-UI 实现图片上传组件的重写与优化

背景 在使用 若依分离版Element-UI 的图片上传组件时,需要根据业务需求进行定制化处理,比如: 需要传递额外的业务参数到后端需要对上传路径进行修改需要对上传组件进行样式定制 实现步骤 1. 创建本地组件 首先在业务模块下创建本地的图片上传组件: src/views/xxx/compone…

预训练模型与ChatGPT:自然语言处理的革新与前景

目录 一、ChatGPT整体背景认知 &#xff08;一&#xff09;ChatGPT引起关注的原因 &#xff08;二&#xff09;与其他公司的竞争情况 二、NLP学习范式的发展 &#xff08;一&#xff09;规则和机器学习时期 &#xff08;二&#xff09;基于神经网络的监督学习时期 &…

同时在github和gitee配置密钥

同时在github和gitee配置密钥 1. 生成不同的 SSH 密钥 为每个平台生成单独的 SSH 密钥。 # 为 GitHub 生成密钥&#xff08;默认文件路径为 ~/.ssh/github_id_rsa&#xff09; ssh-keygen -t rsa -b 4096 -C "your_github_emailexample.com" -f ~/.ssh/github_id_…

GRAG: Graph Retrieval-Augmented Generation

GRAG: Graph Retrieval-Augmented Generation 摘要 简单检索增强生成 (Naive RAG) 聚焦于单一文档的检索&#xff0c;因此在处理网络化文档时表现不足&#xff0c;例如引用图、社交媒体和知识图谱等应用中非常常见的场景。为了解决这一限制&#xff0c;我们提出了图检索增强生…

使用Python OpenCV实现图像形状检测

目录 一、环境准备 二、读取和预处理图像 读取图像 灰度化 滤波去噪 三、边缘检测 四、查找轮廓 五、绘制轮廓 六、形状分类 七、显示结果 八、完整代码示例 九、总结 图像形状检测是计算机视觉领域中的一项关键技术,广泛应用于工业自动化、机器人视觉、医学图像处…

微知-git如何添加空目录的几种方式?(.gitkeep, githook, gitconfig)

背景 在Git中&#xff0c;空目录&#xff08;空文件夹&#xff09;默认是不会被跟踪的&#xff0c;因为Git主要跟踪文件的变化。但是如何让git添加空目录&#xff1f; #mermaid-svg-3Y4NksLyEeuMs4FC {font-family:"trebuchet ms",verdana,arial,sans-serif;font-si…

11.25.2024刷华为OD

文章目录 HJ76 尼科彻斯定理&#xff08;观察题&#xff0c;不难&#xff09;HJ77 火车进站&#xff08;DFS&#xff09;HJ91 走格子方法&#xff0c;&#xff08;动态规划&#xff0c;递归&#xff0c;有代表性&#xff09;HJ93 数组分组&#xff08;递归&#xff09;语法知识…

【RISC-V CPU Debug 专栏 1 -- RISC-V debug 规范】

文章目录 RISC-V Debug调试用例支持的功能限制和不包括的内容RISC-V 调试架构的主要组件用户与调试主机调试翻译器调试传输硬件调试传输模块(DTM)调试模块(DM)调试功能触发模块版本介绍RISC-V Debug RISC-V 调试规范为 RISC-V 处理器提供了一套标准化的调试接口和功能,旨…

#Python 同声传译工具 开发中

功能概述 允许用户选择通过麦克风&#xff08;microphone&#xff09;或者获取系统声音&#xff08;system_sound&#xff09;作为语音输入源。 对输入的语音进行识别&#xff0c;得到对应的文本内容。 将识别出的文本翻译成指定的目标语言。 把翻译后的文本转换为语音并播放出…

多线程篇-8--线程安全(死锁,常用保障安全的方法,安全容器,原子类,Fork/Join框架等)

1、线程安全和不安全定义 &#xff08;1&#xff09;、线程安全 线程安全是指一个类或方法在被多个线程访问的情况下可以正确得到结果&#xff0c;不会出现数据不一致或其他错误行为。 线程安全的条件 1、原子性&#xff08;Atomicity&#xff09; 多个操作要么全部完成&a…