如何在 Ubuntu 12.04 上使用 Apache 配置 WebDAV 访问

简介

WebDAV 是内置在 HTTP 中的分布式网络编辑实现,允许您轻松共享文件并与他人协作。

我们可以在 Web 服务器中安装此扩展,以允许通过 Web 浏览器远程读写访问本地文件。在本指南中,我们将在带有 Apache Web 服务器的 Ubuntu 12.04 VPS 上配置 WebDAV。

在 VPS 上安装 Apache


我们将通过使用 WebDAV 模块在 Apache 上建立我们的 WebDAV 实现。

首先,您需要从 Ubuntu 的默认存储库中安装 Apache。

sudo apt-get update
sudo apt-get install apache2

现在您已经安装了一个完全功能的 Web 服务器。通过在 Web 浏览器中导航到服务器的 IP 地址,应该已经可以访问它。

启用 WebDAV


Apache 内置支持 WebDAV,只需启用一些模块即可访问它们的功能。

使用以下两个命令启用 WebDAV 模块:

sudo a2enmod dav
sudo a2enmod dav_fs

现在我们需要重新启动服务器以实施更改:

sudo service apache2 restart

WebDAV 作为一个功能现在已经启用,但我们还没有为我们的服务器正确配置它。

创建文件系统


我们将创建一个目录,用于存放我们的 WebDAV 文件内容。

Ubuntu 上 Apache 服务器的默认文档根目录位于 /var/www。但是,我们将创建一个别名,这将允许我们将目录内容放在其他地方。

在本指南中,我们将把我们的 WebDAV 内容放在 /webdav/

sudo mkdir /webdav

将 web 用户(即 www-data)赋予新目录的所有权,以便它可以正确地提供内容:

sudo chown www-data /webdav

设置密码保护


我们可以通过创建一个 htpasswd 文件为访问目录内容创建身份验证过程。

我们将其放在内容目录之外,以便系统用户无法访问它。在命令调用中创建一个用户名,然后会提示您输入相关密码:

sudo htpasswd -c /etc/apache2/webdav.password <span class="highlight">用户名</span>

现在,任何人都可以在文件中查看用户名和哈希密码。我们将把文件的组所有权分配给 www-data,然后将其他人的权限锁定:

sudo chown root:www-data /etc/apache2/webdav.password
sudo chmod 640 /etc/apache2/webdav.password

配置 Apache


现在,我们将不得不配置对我们的内容目录的访问,并告诉 Apache 使用 WebDAV 模块来提供该位置。我们还必须注意我们创建的身份验证方案。

以 root 权限编辑主虚拟主机配置:

sudo nano /etc/apache2/sites-available/default

在这里,我们的 Web 内容像往常一样从 /var/www 提供。我们将添加一些信息,让 Apache 将我们新目录中的内容视为 WebDAV 材料。

在目录列表下面,我们将添加一个别名指令,告诉 Apache 请求 “/webdav” 应该从我们创建的 /webdav 目录中提供服务。

然后,我们将添加选项以允许使用我们建立的方法进行身份验证。

. . .
. . .
<Directory /var/www/>
	Options Indexes FollowSymLinks MultiViews
	AllowOverride None
	Order allow,deny
	allow from all
</Directory>

<span class="highlight">Alias /webdav /webdav</span>

<span class="highlight">&lt;Location /webdav&gt;</span>
	<span class="highlight">Options Indexes</span>
	<span class="highlight">DAV On</span>
	<span class="highlight">AuthType Basic</span>
	<span class="highlight">AuthName "webdav"</span>
	<span class="highlight">AuthUserFile /etc/apache2/webdav.password</span>
	<span class="highlight">Require valid-user</span>
<span class="highlight">&lt;/Location&gt;</span>
. . .
. . .

保存并关闭文件。

使用以下命令重新启动 Apache:

sudo service apache2 restart

测试结果


您可以首先在 Web 浏览器中测试配置的结果,然后在 WebDAV 客户端中进行测试。

Web 浏览器测试


要测试您的身份验证是否正常工作,请使用 Web 浏览器导航到服务器的 IP 地址或域名。

您应该会看到默认的 Apache index.html 文件:

Apache Default index

这证明了常规 Web 功能正在工作。

现在,导航到您的 IP 地址或域名,后面跟着 “/webdav”:

<span class="highlight">您的_IP地址或域名</span>/webdav

您应该会提示输入您之前设置的用户名和密码组合。之后,您应该会看到一个空的目录列表:

Empty WebDAV

我们目前在这里没有任何内容,但我们将能够通过使用 WebDAV 客户端访问相同的区域来改变这一点。

WebDEV 客户端测试


有许多 WebDAV 客户端,并且对 WebDAV 访问的支持已经内置在许多流行的文件管理器中。

为了简单起见,在本指南中,我们将使用一个名为 “cadaver” 的简单命令行 WebDAV 客户端。

最好是从另一个 droplet 或 Linux 机器上,从默认仓库安装 cadaver:

sudo apt-get install cadaver

现在,让我们创建一个文件,我们将上传到 WebDAV 目录:

cd ~
touch testfile

接下来,我们将使用与从浏览器访问相同的位置连接:

cadaver http://<span class="highlight">your_IP_address_or_domain</span>/webdav
服务器 `162.243.2.14` 上需要对 webdav 进行身份验证:
用户名:

您必须输入 “http://” 部分,以便 cadaver 正确找到您的服务器。我们需要再次进行身份验证,然后我们将进入一个命令行界面。

dav:/webdav/>

在这里,我们可以同时使用类似于常规 Linux 命令的命令来操作客户端和主机。

要列出服务器目录的内容,请输入:

ls

列出集合 `/webdav/`:集合为空。

该目录为空。让我们上传我们的测试文件来改变这种情况:

put testfile

我们可以再次尝试列表命令,看到文件现在在服务器上:

ls

列出集合 `/webdav/`:成功。 testfile 0 Sep 20 19:36

我们可以通过输入以下命令来创建一个目录并进入其中:

mkdir hello
cd hello

然后,我们可以通过输入以下命令来创建一个文件:

edit file.html

我们可以插入任何我们想要的内容:

<h1>你好!!!</h1>

完成后,我们可以输入 exit 来关闭连接:

exit

现在,如果我们回到我们的网络浏览器,我们所做的更改是可见的:

<span class="highlight">your_IP_address_or_domain</span>/webdav
WebDAV content

关闭目录列表


尽管目录列表对于查看 WebDAV 可用的文件非常有用,但通常情况下,特别是如果您将其用于实际的网络内容,关闭该列表会更有用。

如果您希望 Web 可访问部分的行为更像一个网站,而不是一个目录列表,从配置文件中删除 “Options Indexes” 行:

sudo nano /etc/apache2/sites-available/default
Alias /webdav /webdav

<Location /webdav>
	<span class="highlight">Options Indexes     ## 删除此行</span>
	DAV On
	AuthType Basic
	AuthName "webdav"
	AuthUserFile /etc/apache2/webdav.password
	Require valid-user
</Location>
. . .
. . .

重新启动 Apache 以使用您的更改:

sudo service apache2 restart

请记住,您需要创建常规的网页才能使其正确运行,比如一个 “index.html” 文件:

sudo nano /webdav/index.html

<h1>默认的 WebDAV 页面</h1>
<p>这是默认页面,目录列表已关闭</p>

保存并关闭文件。

当我们导航到主要的 WebDAV 目录时,该页面现在会显示,但编辑功能仍然可以在客户端上启用。

WebDAV landing page

结论


现在,您应该拥有一个完整的带有基本身份验证的 WebDAV 目录。如果您的目录包含绝对必须保密的内容,您可能希望在密码身份验证之上实现 SSL 解决方案。然而,这超出了本文的范围。

许多文件管理器和客户端可以无缝访问和修改 WebDAV 内容,就好像它是额外的本地存储一样。WebDAV 允许比传统可能的 HTTP 体验更加动态。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【小沐学Java】VSCode搭建Java开发环境

文章目录 1、简介2、安装VSCode2.1 简介2.2 安装 3、安装Java SDK3.1 简介3.2 安装3.3 配置 4、安装插件Java Extension Pack4.1 简介4.2 安装4.3 配置 结语 1、简介 2、安装VSCode 2.1 简介 Visual Studio Code 是一个轻量级但功能强大的源代码编辑器&#xff0c;可在桌面上…

全志ARM-超声波测距

超声波测距模块是用来测量距离的一种产品&#xff0c;通过发送和收超声波&#xff0c;利用时间差和声音传播速度&#xff0c; 计算出模块到前方障碍物的距离 1.测距原理&#xff1a; 给Trig端口至少10us的高电平发送声波&#xff0c;Echo信号&#xff0c;由低电平跳转到高电平…

Docker 部署与操作

一 国内&#xff1a; 中国电信天翼云 提供包括云主机在内的全方位云计算服务&#xff0c;侧重于安全合规和企业级服务。 利用电信的网络优势&#xff0c;提供稳定可靠的基础设施服务。 中国联通沃云 提供包括云主机在内的多项云计算服务&#xff0c;适合不同行业和场景。 …

Redis篇:缓存雪崩及解决方案

1.何为缓存雪崩 缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机&#xff0c;导致大量请求到达数据库&#xff0c;带来巨大压力。 2.缓存雪崩的解决方案 解决方案&#xff1a; 给不同的Key的TTL添加随机值 利用Redis集群提高服务的可用性 给缓存业务添加降级…

如何避免被恶意攻击的IP地址

随着互联网的普及和发展&#xff0c;网络安全问题日益受到关注&#xff0c;恶意攻击成为网络安全的一大威胁。而IP地址作为网络通信的基础&#xff0c;常常成为恶意攻击的目标之一。本文将探讨如何避免被恶意攻击的IP地址&#xff0c;提高网络安全水平。 1. 定期更新安全补丁 …

【C++】--------模板进阶

目录 前言 一、非类型模板参数 定义 二、模板的特化&#xff08;步骤都一样&#xff09; 1.概念 2.函数模板特化的步骤 3.类模板的特化 3.1全特化 3.2偏特化/半特化 三、模板的分离与编译 1.什么是分离编译&#xff1f; 2.模板的分离与编译 四、总结 前言 我们已经…

BPE、Wordpiece、Unigram、SpanBERT等Tokenizer细节总结

BPE(Byte Pair Encoding) GPT-2和Roberta用的是这种&#xff0c;不会产生[UNK]这个unknown字符 这部分部分摘录自https://martinlwx.github.io/zh-cn/the-bpe-tokenizer/ 看以下code例子就足够理解了&#xff0c;核心是维护self.merges&#xff08;维护一个pair->str的字…

一文掌握Vue依赖注入:原理、应用场景以及最佳模块化与单元测试实践,提升代码的可维护性与模块化程度

Vue 中的依赖注入&#xff08;Dependency Injection, DI&#xff09;机制通过 provide 与 inject API&#xff0c;实现了跨组件层级间的数据与服务透明传递&#xff0c;使父组件能够向其任意深度的子孙组件“注入”依赖&#xff0c;而不需要通过层层传递 props 或使用全局状态管…

Pytorch实现线性回归模型

在机器学习和深度学习的世界中&#xff0c;线性回归模型是一种基础且广泛使用的算法&#xff0c;简单易于理解&#xff0c;但功能强大&#xff0c;可以作为更复杂模型的基础。使用PyTorch实现线性回归模型不仅可以帮助初学者理解模型的基本概念&#xff0c;还可以为进一步探索更…

SpringCloud(微服务介绍,远程调用RestTemplate,注册中心Nacos,负载均衡Ribbon,环境隔离,进程和线程的区别)【详解】

目录 一、微服务介绍 1. 系统架构的演变 1 单体架构 2 分布式服务 3 微服务 2. SpringCloud介绍 SpringCloud简介 SpringCloud版本 3. 小结 二、远程调用RestTemplate【理解】 1. 服务拆分 1 服务拆分原则 2 服务拆分示例 1) 创建父工程 2) 准备用户服务 1. 用户…

Docker数据管理与Dockerfile镜像创建

前言 在容器化环境中&#xff0c;如何有效地管理和持久化数据成为了开发人员和运维团队面临的挑战之一&#xff1b;另一方面&#xff0c;镜像的创建是构建容器化应用的基础。优化的镜像设计可以提高部署效率和应用性能&#xff0c;减少资源消耗和运行成本。本文将介绍 Docker …

锂电池SOH预测 | 基于LSTM的锂电池SOH预测(附matlab完整源码)

锂电池SOH预测 锂电池SOH预测完整代码锂电池SOH预测 锂电池的SOH(状态健康度)预测是一项重要的任务,它可以帮助确定电池的健康状况和剩余寿命,从而优化电池的使用和维护策略。 SOH预测可以通过多种方法实现,其中一些常用的方法包括: 容量衰减法:通过监测电池的容量衰减…

锂电池SOH预测 | 基于CNN-GRU的锂电池SOH预测(matlab)

锂电池SOH预测 锂电池SOH预测完整代码锂电池SOH预测 锂电池的SOH(状态健康度)预测是一项重要的任务,它可以帮助确定电池的健康状况和剩余寿命,从而优化电池的使用和维护策略。 SOH预测可以通过多种方法实现,其中一些常用的方法包括: 容量衰减法:通过监测电池的容量衰减…

【Docker】Docker 实践(三):使用 Dockerfile 文件构建镜像

Docker 实践&#xff08;三&#xff09;&#xff1a;使用 Dockerfile 文件构建镜像 1.使用 Dockerfile 文件构建镜像2.Dockerfile 文件详解 1.使用 Dockerfile 文件构建镜像 Dockerfile 是一个文本文件&#xff0c;其中包含了一条条的指令&#xff0c;每一条指令都用于构建镜像…

解决VMware启动异常

问题1&#xff1a;该虚拟机似乎正在使用中。如果该虚拟机未在使用&#xff0c;请按“获取所有权(T)”按钮获 取它的所有权。否则&#xff0c;请按“取消(C)”按钮以防损坏。 解决步骤&#xff1a; 按弹框提示的配置文件目录下删除后缀为lck的文件&#xff08;lock&#xff09;。…

Facebook的未知力量:数字世界的新引擎

在数字化的时代&#xff0c;社交媒体已经成为了我们日常生活中不可或缺的一部分&#xff0c;而Facebook作为其中的巨头&#xff0c;其影响力远远超出了我们的想象。但是&#xff0c;Facebook背后隐藏的力量和影响远不止于此&#xff0c;它正逐渐成为数字世界的新引擎&#xff0…

C语言-动态内存分配

即使行动导致错误&#xff0c;却也带来了学习与成长;不行动则是停滞与萎缩。&#x1f493;&#x1f493;&#x1f493; •&#x1f319;知识回顾 亲爱的友友们大家好&#xff01;&#x1f496;&#x1f496;&#x1f496;&#xff0c;我们紧接着要进入一个新的内容&#xff0c;…

STM32单片机C语言模块化编程实战:按键控制LED灯详解与示例

一、开发环境 硬件&#xff1a;正点原子探索者 V3 STM32F407 开发板 单片机&#xff1a;STM32F407ZGT6 Keil版本&#xff1a;5.32 STM32CubeMX版本&#xff1a;6.9.2 STM32Cube MCU Packges版本&#xff1a;STM32F4 V1.27.1 之前介绍了很多关于点灯的方法&#xff0c;比如…

微信小程序的常用API②

一、动画API &#xff08;1&#xff09;作用&#xff1a;用于在微信小程序中完成动画效果的制作 &#xff08;2&#xff09;使用&#xff1a;创建实例 wx.createAnimation() &#xff08;3&#xff09;常用属性&#xff1a; duration 【number型】 动画持续时间&…

Qt的qtmqtt库连接onenet出现QMQTT::SocketRemoteHostClosedError解决方法

问题描述 在Qt发开过程中使用qtmqtt库来连接onenet的mqtt服务器&#xff0c;在ClientId、Username和Password均填写正确的情况下还是连接不上&#xff0c;查看错误显示QMQTT::SocketRemoteHostClosedError。 解决方法 client中的CleanSession标志位必须设置为true。 client …