0%

Linux下 webdav 服务器的安装

搭建一个 WebDAV 服务器,可以选择不同的服务器软件,比如 Apache、Nginx 或其他开源解决方案。下面我将详细介绍如何在 Ubuntu 上使用 Apache HTTP Server 来搭建 WebDAV 服务器。

1. 安装 Apache 和 WebDAV 模块

首先,确保系统更新并安装 Apache HTTP Server 以及 WebDAV 所需的模块:

1
2
3
4
sudo apt update
sudo apt install apache2
sudo a2enmod dav
sudo a2enmod dav_fs

2. 配置 WebDAV 目录

接下来,配置一个目录来存储 WebDAV 文件,并在 Apache 中启用该目录的 WebDAV 功能。

编辑 Apache 的默认配置文件(例如 /etc/apache2/sites-available/000-default.conf),添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
Alias /webdav /var/www/webdav

<Directory /var/www/webdav>
DAV On
AuthType Basic
AuthName "WebDAV"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

<LimitExcept GET OPTIONS>
Require valid-user
</LimitExcept>
</Directory>

3. 创建 WebDAV 目录并设置权限

创建用于存储 WebDAV 文件的目录,并设置适当的权限:

1
2
3
sudo mkdir /var/www/webdav
sudo chown -R www-data:www-data /var/www/webdav
sudo chmod -R 755 /var/www/webdav

4. 设置用户认证

为了保护 WebDAV 目录,需要设置基本的 HTTP 认证。创建一个认证文件并添加用户:

1
sudo htpasswd -c /etc/apache2/.htpasswd username

系统会提示输入并确认用户的密码。

5. 重启 Apache 服务器

完成上述配置后,重启 Apache 服务器以应用更改:

1
2
3
sudo systemctl restart apache2
sudo systemctl status apache2 # 查看是否正常运行

  1. 访问 WebDAV 服务器
    现在,WebDAV 服务器已经配置完成,可以通过以下 URL 访问:
1
http://your-server-ip/webdav

验证配置

你可以使用 Web 浏览器、命令行工具(如 curl)、或者 WebDAV 客户端(如 Cyberduck、WinSCP)来测试 WebDAV 服务器。

使用 curl 命令行工具测试:

1
2
3
4
5
# 上传文件
curl -u username:password -T localfile.txt http://your-server-ip/webdav/remote.txt

# 下载文件
curl -u username:password -O http://your-server-ip/webdav/remote.txt

示例客户端访问(Python)

使用 Python 中的 requests 库来访问 WebDAV 服务器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import requests
from requests.auth import HTTPBasicAuth

url = 'http://your-server-ip/webdav/test.txt'
username = 'your-username'
password = 'your-password'

# 上传文件
with open('localfile.txt', 'rb') as f:
response = requests.put(url, data=f, auth=HTTPBasicAuth(username, password))
print(response.status_code)

# 下载文件
response = requests.get(url, auth=HTTPBasicAuth(username, password))
with open('downloaded_test.txt', 'wb') as f:
f.write(response.content)
print(response.status_code)

结论

通过上述步骤,你已经成功在 Ubuntu 上使用 Apache HTTP Server 搭建了一个 WebDAV 服务器。WebDAV 服务器可以用于在线存储和管理文件,适用于协作编辑和文件同步。通过适当的认证和权限设置,可以确保数据的安全性。

其他操作

1、检查 Apache 错误日志

1
sudo tail -f /var/log/apache2/error.log

2、测试本地连接

1
2
curl -u username:password http://localhost/webdav/

3、检查 Apache 配置文件语法

1
2
sudo apache2ctl configtest

如果输出包含 Syntax OK,则表示配置文件语法正确。如果有错误,请根据提示修正。

4、检查监听端口

确保 Apache 正在监听端口 80:

1
2
sudo netstat -tuln | grep :80

输出中应该有一行类似以下内容:

1
2
tcp6       0      0 :::80                   :::*                    LISTEN

5、清理现有配置:

1
2
3
4
sudo a2dismod dav dav_fs
sudo rm /etc/apache2/.htpasswd
sudo rm -rf /var/www/webdav

6、修改 Apache 配置监听端口

首先,您需要确保 Apache 监听端口 8080。编辑 Apache 的主配置文件(通常是 ports.conf):

1
2
sudo vi /etc/apache2/ports.conf

添加以下行(如果已存在,确认其配置正确):

1
Listen 8080

配置虚拟主机以使用端口 8080

编辑默认的虚拟主机配置文件(通常是 000-default.conf):

1
sudo nano /etc/apache2/sites-available/000-default.conf

<VirtualHost *:80> 修改为 <VirtualHost *:8080>,并确保配置正确:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<VirtualHost *:8080>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html

Alias /webdav /var/www/webdav

<Directory /var/www/webdav>
DAV On
AuthType Basic
AuthName "WebDAV"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

<LimitExcept GET OPTIONS>
Require valid-user
</LimitExcept>
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

7、You don’t have permission to access this resource.

访问 wevdav 服务器时,提示You don't have permission to access this resource.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<VirtualHost *:8080>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html

Alias /webdav /var/www/webdav

<Directory /var/www/webdav>
# 添加如下 3 行配置
Options Indexes FollowSymLinks
AllowOverride None
Require all granted

DAV On
AuthType Basic
AuthName "WebDAV"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

<LimitExcept GET OPTIONS>
Require valid-user
</LimitExcept>
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

8、修改WebDAV 目录

如果您不想使用 /var/www/webdav 作为 WebDAV 目录,可以选择其他目录并进行相应的配置。以下是详细步骤,以 /data/webdav 为例:

首先,在您希望的位置创建新的 WebDAV 目录:

1
2
3
sudo mkdir -p /data/webdav
sudo chown -R www-data:www-data /data/webdav
sudo chmod -R 755 /data/webdav

修改/etc/apache2/sites-available/000-default.conf配置文件中的 WebDAV 目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

<VirtualHost *:8080>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html

Alias /webdav /data/webdav

<Directory /data/webdav>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted

DAV On
AuthType Basic
AuthName "WebDAV"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

<LimitExcept GET OPTIONS>
Require valid-user
</LimitExcept>
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

9、确认目录权限和修改 Apache 用户

确保 WebDAV 目录 /data/webdav 具有适当的权限,使得 Apache 用户(通常是 www-data)有读写权限。

1
2
3
sudo chown -R www-data:www-data /data/webdav
sudo chmod -R 755 /data/webdav

确认 Apache 用户
确保 Apache 使用的用户和组是 www-data。这通常在 apache2.conf 或 envvars 文件中定义。

编辑 envvars 文件(Ubuntu/Debian 通常位于 /etc/apache2/envvars):

1
sudo vi /etc/apache2/envvars

确保以下行存在:

1
2
3
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

如果不想用 用户和组是 www-data, 则创建新的用户和用户组,并修改上述配置

10、上传文件到 WebDAV 服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import requests
from requests.auth import HTTPBasicAuth

# WebDAV 服务器的 URL 和目标路径
webdav_url = 'http://your-server-ip:8080/webdav/'
file_path = 'localfile.txt' # 本地文件路径
remote_path = webdav_url + 'remote_file.txt' # 远程文件路径

# WebDAV 用户名和密码
username = 'your_username'
password = 'your_password'

# 打开本地文件
with open(file_path, 'rb') as file:
# 使用 requests.put() 方法上传文件
response = requests.put(remote_path, data=file, auth=HTTPBasicAuth(username, password))

# 检查响应状态码
if response.status_code == 201 or response.status_code == 204:
print('文件上传成功')
else:
print(f'文件上传失败,状态码: {response.status_code}')
print(response.text)

11、上传文件夹到 WebDAV 服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import os
import requests
from requests.auth import HTTPBasicAuth

# WebDAV 服务器的 URL 和目标路径
webdav_url = 'http://your-server-ip:8080/webdav/'
local_folder = 'local_folder/' # 本地文件夹路径

# WebDAV 用户名和密码
username = 'your_username'
password = 'your_password'

# 上传单个文件
def upload_file(local_file, remote_file):
with open(local_file, 'rb') as file:
response = requests.put(remote_file, data=file, auth=HTTPBasicAuth(username, password))
return response.status_code

# 递归上传文件夹中的所有文件
def upload_folder(local_folder, remote_folder):
for root, _, files in os.walk(local_folder):
for file in files:
local_file = os.path.join(root, file)
relative_path = os.path.relpath(local_file, local_folder)
remote_file = os.path.join(remote_folder, relative_path).replace("\\", "/")
response_code = upload_file(local_file, remote_file)
if response_code in [201, 204]:
print(f'文件上传成功: {local_file}')
else:
print(f'文件上传失败: {local_file},状态码: {response_code}')

# 上传文件夹
upload_folder(local_folder, webdav_url)


------------- 本文结束 感谢您的阅读-------------