实战Apache2搭建WebDAV + Nginx HTTPS反向代理

WebDAV是一个十分方便的文件传输方式。因为基于HTTP协议,大部分应用都支持WebDAV。

对于OwnCloud,它还支持使用WebDAV作为一种附加存储。于是决定使用模块较多的Apache2搭建WebDAV。

下面就简单介绍一下方法

一、基于Apache2的WebDAV实现

首先转到Apache2的配置文件夹,新建一个虚拟主机:

cd /etc/apache2/sites-available
sudo nano 001-webdav.conf

在站点配置文件中写入:

<Directory /xxx/xxx/webdav/>
	Options Indexes MultiViews
	AllowOverride None
	Order allow,deny
	allow from all
	require all granted
</Directory>

<VirtualHost *:89>
	ServerAdmin webmaster@mewwoof.cn
	ServerName webdav.xxx.com
	DocumentRoot /xxx/xxx/webdav/

	<Location />
		Dav On	
		AuthType Basic
		AuthName "Webdav"
		AuthUserFile /xxx/xxx/webdav.passwd
		Require valid-user
	</Location>
</VirtualHost>

这样就成功搭建了一个WebDAV服务
下面就让我们来详细解析一下这个配置

1、设置站点目录权限

<Directory /xxx/xxx/webdav/>
//其他配置
</Directory>

这里对硬盘上的这个网页文件夹进行了权限的配置,允许用户访问这个文件夹

2、设置虚拟主机

<VirtualHost *:89>

这表示新建了一个虚拟主机。

注意这里有个坑:这里指定的主机名和端口号指的是监听主机名/地址和端口号。
比如如果你的服务器有多个网卡,一个地址172.16.1.1,另一个172.16.1.2,如果填172.16.1.1:89,那么这个站点就只接收来自172.16.1.1的89端口的请求。搭建的时候还以为这里填的是虚拟主机名称,当时折腾了好久才弄明白问题所在。

下面的配置就不一一解释了,稍微有点英语基础的应该都看得懂= =吧。

二、基本身份认证——添加用户

上面的配置文件中,有一行是这样的:

AuthUserFile /xxx/xxx/webdav.passwd

这里的webdav.passwd是一个密码文件,里面记录着用户名和密码。现在我们要做的就是创建这个文件,并且使用htpasswd命令将用户名和加密后的密码写进去。

sudo htpasswd -bc /xxx/xxx/webdav.passwd username password

这里选项中“c”表示创建新文件,如果已经创建了密码文件,则“-b”即可。

那么现在试着在浏览器中输入http://webdav.xxx.com:89,应该就会弹出登录提示框了,这时只要填上刚刚添加的用户名和密码即可访问了。

三、Nginx反向代理配置

我们已经配置好了WebDAV服务器,现在服务器配置如下:

  • 虚拟主机名称:webdav.xxx.com
  • 协议:HTTP
  • 端口:89

那么现在我们要求通过以下方式访问我们的WebDAV服务器:

  • 虚拟主机名称:webdav123.xxx.com
  • 协议:HTTPS
  • 端口:443

那么我们应该如何配置呢?

话不多说,先上配置:

server {
	listen 443 ssl;
	server_name webdav123.xxx.com;

	ssl_certificate /xxx/xxx/xx.pem;
	ssl_certificate_key /xxx/xxx/xx.pem;

	location / {
		proxy_pass http://127.0.0.1:89;
		proxy_redirect off;
		proxy_set_header X-Forwarded-Proto $scheme;
		proxy_set_header Host webdav.xxx.com;
		proxy_set_header X-Real-IP $remote_addr;
	}
}

上面的部分和常规的Nginx配置差不多,无非就是设置端口、虚拟主机名称和SSL证书。需要提一下的是下面的反代配置。

proxy_pass:设置上游服务器的地址;
proxy_set_header:设置HTTP请求头。这个比较重要:因为我们的WebDAV设置了虚拟主机名称,也就是说,HTTP请求头必须包含这个主机名称才可以访问到对应的站点。在这里我们需要设置向上游服务器发送的请求头中,虚拟主机名称为webdav.xxx.com。(请先学习HTTP请求头有关知识)(更多关于Nginx反代的配置,到时我再开一篇文章专门写写吧)

那么现在,我们打开浏览器,或者文件资源管理器,输入https://webdav123.xxx.com,即可访问WebDAV文件夹啦。

(完结撒花~)

发表评论