<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="https://v1sta.xyz/wp-content/plugins/pretty-rss-feeds/xslt/pretty-feed.xsl" type="text/xsl" media="screen" ?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/">

<channel>
	<title>WebDAV &#8211; 景の域</title>
	<atom:link href="https://v1sta.xyz/tag/webdav/feed/" rel="self" type="application/rss+xml" />
	<link>https://v1sta.xyz</link>
	<description>远景的幻想空间</description>
	<lastBuildDate>Sun, 25 Jun 2023 06:29:41 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://v1sta.xyz/wp-content/uploads/2026/03/V1sta-Orb-Output512-2-60x60.png</url>
	<title>WebDAV &#8211; 景の域</title>
	<link>https://v1sta.xyz</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/>
<atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/>
<atom:link rel="hub" href="https://websubhub.com/hub"/>
<atom:link rel="self" href="https://v1sta.xyz/tag/webdav/feed/"/>
	<item>
		<title>搭建基于h5ai的文件共享空间：WebDAV篇</title>
		<link>https://v1sta.xyz/tech/file-carbinet-webdav/</link>
					<comments>https://v1sta.xyz/tech/file-carbinet-webdav/#respond</comments>
		
		<dc:creator><![CDATA[远景の域主 V1STA]]></dc:creator>
		<pubDate>Sun, 25 Jun 2023 06:20:18 +0000</pubDate>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[WebDAV]]></category>
		<guid isPermaLink="false">https://v1sta.xyz/?p=1440</guid>

					<description><![CDATA[上篇文章介绍了如何用h5ai搭建资源存放箱，但是h5ai只能共享展示文件列表，并不具备管理文件的功能。

虽然可以通过SFTP上传和管理文件，域主自己也尝试了SSHFS-Win挂载VPS的目录，显然速度并不理想，其他的协议（如FTP、SMB）放在公网不安全、配置证书或VPN又相当麻烦，因此还是要搭建一个WebDAV服务。]]></description>
										<content:encoded><![CDATA[
<p>上篇文章介绍了如何用h5ai搭建资源存放箱，但是h5ai只能共享展示文件列表，并不具备管理文件的功能。</p>



<p>虽然可以通过SFTP上传和管理文件，域主自己也尝试了SSHFS-Win挂载VPS的目录，显然速度并不理想，其他的协议（如FTP、SMB）放在公网不安全、配置证书或VPN又相当麻烦，因此还是要搭建一个WebDAV服务。</p>



<span id="more-1440"></span>



<p>关于上篇搭建h5ai的文章，请点击下方阅读：</p>



<figure class="wp-block-mamaduka-bookmark-card is-style-default"><a class="bookmark-card" href="https://v1sta.xyz/tech/file-carbinet-h5ai/"><div class="bookmark-card__image"><img decoding="async" src="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_MKhlJzZyao.png"/></div><div class="bookmark-card__content"><div class="bookmark-card__title">搭建基于h5ai的文件共享空间：h5ai篇 &#8211; 景の域</div><div class="bookmark-card__description">最近重新弄了一下Minecraft的服务器，上次说到，HMCL启动器支持通过静态文件列表检查整合包完整性，实现自动更新的功能。</div><div class="bookmark_card__meta"><img decoding="async" class="bookmark_card__meta-icon" src="https://v1sta.xyz/wp-content/uploads/2023/05/cropped-blutorii-16x16.png"/><span class="bookmark_card__meta-publisher">v1sta.xyz</span></div></div></a></figure>



<p></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Linux平台有许多WebDAV的服务端，Go、Rust等编写的二进制服务端，如Dave、Davrage，有PHP写的SabreDAV，有Docker运行的容器；一些私有云程序如Nextcloud、Rclone也内建了WebDAV的功能，甚至Nginx、Apache都可以通过模块支持简单的WebDAV协议……</p>



<p>域主在搭建WebDAV的时候，先后尝试了Dave和Davrage，下载了二进制文件，复制到 <code>/usr/local</code> 新建子目录，并用 <code>ln -s</code> 在 <code>/usr/bin</code> 目录下创建软链接、自行编写Systemd Service系统服务，再用Nginx反代，但就是跑不起来……</p>



<pre class="wp-block-preformatted">[Unit]
Description=WebDAV Service
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=root
ExecStart=/usr/bin/dave
</pre>



<p>Davrage可算作是Dave的改版，Dave使用yaml配置，而Davrage使用环境变量（Environment）运行，读取命令行参数或者env文件中的变量。</p>



<p>Davrage的更新时间比Dave晚一些。不过都卡在了用户验证的环节，而且没法被Windows系统自带的文件夹映射识别到……</p>



<pre class="wp-block-preformatted">[Unit]
Description=WebDAV Service
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=root
ExecStart=/usr/bin/davrage
EnvironmentFile=/usr/local/davrage/env
</pre>



<p>尽管轻量小巧，既然不能用也不过是废柴一个（霖并感），逐放弃。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>后来了解到了Rclone，虽然主要的功能是聚合挂载网络云盘映射到本地，但也可以运行兼容的WebDAV服务。</p>



<p>搭建WebDAV的过程中参考了这篇文章： <a href="https://sharpgan.com/rclone-webdav-service-with-systemd-and-nginx-and-cloudflare/">Rclone搭建Webdav服务+Systemd保活+Nginx反代+CF加速一条龙</a> ，虽然也需要自己创建Systemd服务，至少可以正常运行了。</p>



<p>先创建单独的运行用户，通过wget下载rclone并解压，解压到用户目录下：</p>



<pre class="wp-block-preformatted">adduser webdav
su - webdav &amp;&amp; mkdir rclone &amp;&amp; cd rclone
wget https://downloads.rclone.org/rclone-current-linux-amd64.zip
unzip rclone-current-linux-amd64.zip &amp;&amp; mv rclone-v1.62.0-linux-amd64/rclone ./ &amp;&amp; rm -rf rclone-current-linux-amd64*
</pre>



<p>下面是Rclone的Systemd服务配置，需要指定运行参数、路径 （其中 <code>[domain.ltd]</code> 为网站目录的域名），并且单独创建htpasswd的密码文件。</p>



<pre class="wp-block-preformatted">[Unit]
Description=Rclone Webdav Service
After=network.target
[Service]
User=webdav
# Execute `systemctl daemon-reload` after ExecStart= is changed.
ExecStart=/home/webdav/rclone/rclone serve webdav /var/www/[domain.ltd]/htdocs --addr 127.0.0.1:5000 --htpasswd /home/webdav/rclone/htpasswd
[Install]
WantedBy=multi-user.target</pre>



<p>在命令行中创建bcrypt格式的密码文件，其中 <code>[username]</code> 为用户名，可随意填写，随后根据交互式命令输入密码：</p>



<pre class="wp-block-preformatted">apt-get install apache2-utils
cd /home/webdav/rclone
touch htpasswd
htpasswd -B htpasswd [username]</pre>



<p>保存以后重启一下systemd的daemon，再启用Rclone服务配置的自启动项：</p>



<pre class="wp-block-preformatted">systemctl daemon-reload
systemctl enable rclone
systemctl start rclone
systemctl status rclone</pre>



<p>Nginx反代可以使用SSL，由于Rclone的WebDAV服务也附带一个简单的文件列表，建议配置额外的端口号或者子域名访问，不放在主要的443 server 配置中，避免安全性和配置冲突问题。</p>



<pre class="wp-block-preformatted">error_page 405 = @app;
location @app {
proxy_pass http://127.0.0.1:5000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
location ~ /.well-known {
allow all;
}
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
}</pre>



<p>访问浏览器，输入webdav的地址，再输入访问的用户名和密码，即可访问rclone自带的索引列表界面：</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><a href="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_CWq9GvCFQl.png" data-lbwps-width="1027" data-lbwps-height="772" data-lbwps-srcsmall="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_CWq9GvCFQl-300x226.png"><img data-dominant-color="fcfcfc" data-has-transparency="true" style="--dominant-color: #fcfcfc;" fetchpriority="high" decoding="async" sizes="(max-width: 1024px) 100vw, 1024px" src="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_CWq9GvCFQl-1024x770.png" alt="" class="wp-image-1443 has-transparency" width="504" height="378" srcset="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_CWq9GvCFQl-1024x770.png 1024w, https://v1sta.xyz/wp-content/uploads/2023/06/chrome_CWq9GvCFQl-300x226.png 300w, https://v1sta.xyz/wp-content/uploads/2023/06/chrome_CWq9GvCFQl-768x577.png 768w, https://v1sta.xyz/wp-content/uploads/2023/06/chrome_CWq9GvCFQl.png 1027w" /></a></figure>
</div>


<p>使用资源管理器（Explorer）添加网络向导和映射网络驱动器也可以正常识别：</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://v1sta.xyz/wp-content/uploads/2023/06/rundll32_vdkmqEDhVA.png" data-lbwps-width="595" data-lbwps-height="534" data-lbwps-srcsmall="https://v1sta.xyz/wp-content/uploads/2023/06/rundll32_vdkmqEDhVA-300x269.png"><img data-dominant-color="fafbfb" data-has-transparency="true" style="--dominant-color: #fafbfb;" decoding="async" width="595" height="534" sizes="(max-width: 595px) 100vw, 595px" src="https://v1sta.xyz/wp-content/uploads/2023/06/rundll32_vdkmqEDhVA.png" alt="" class="wp-image-1444 has-transparency" srcset="https://v1sta.xyz/wp-content/uploads/2023/06/rundll32_vdkmqEDhVA.png 595w, https://v1sta.xyz/wp-content/uploads/2023/06/rundll32_vdkmqEDhVA-300x269.png 300w" /></a></figure>
</div>


<p>缩略图可以正常显示在映射启动器中：</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><a href="https://v1sta.xyz/wp-content/uploads/2023/06/explorer_vWhZYlQenu.png" data-lbwps-width="1033" data-lbwps-height="729" data-lbwps-srcsmall="https://v1sta.xyz/wp-content/uploads/2023/06/explorer_vWhZYlQenu-300x212.png"><img data-dominant-color="f9faf9" data-has-transparency="true" style="--dominant-color: #f9faf9;" decoding="async" width="1024" height="723" sizes="(max-width: 1024px) 100vw, 1024px" src="https://v1sta.xyz/wp-content/uploads/2023/06/explorer_vWhZYlQenu-1024x723.png" alt="" class="wp-image-1445 has-transparency" srcset="https://v1sta.xyz/wp-content/uploads/2023/06/explorer_vWhZYlQenu-1024x723.png 1024w, https://v1sta.xyz/wp-content/uploads/2023/06/explorer_vWhZYlQenu-300x212.png 300w, https://v1sta.xyz/wp-content/uploads/2023/06/explorer_vWhZYlQenu-768x542.png 768w, https://v1sta.xyz/wp-content/uploads/2023/06/explorer_vWhZYlQenu.png 1033w" /></a></figure>
</div>


<p>至此，一个基于h5ai和WebDAV的文件共享空间，就搭建完成了。</p>



<p>不过也要想一个好名字……</p>



<p>让我这个域主，为这个共享空间命名吧，闭上眼随意思考一个名字来决定，它会暗示这个空间的存在感，也会暗示这个空间的能力……</p>



<p>文件！是文件的资源，让我为它命名，这个共享空间的名字是……</p>



<p>资源存放箱！<sup>File Carbinet</sup>  能力为列出文件资源的列表在站点上共享</p>



<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=500 height=88 src="//music.163.com/outchain/player?type=2&#038;id=30482386&#038;auto=0&#038;height=66"></iframe>

<p><a href="https://v1sta.xyz/tech/file-carbinet-webdav/" rel="nofollow">来源</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://v1sta.xyz/tech/file-carbinet-webdav/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<enclosure url="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_CWq9GvCFQl.png" length="26251" type="image/png"/><media:content url="https://v1sta.xyz/wp-content/uploads/2023/06/chrome_CWq9GvCFQl.png" width="1027" height="772" medium="image" type="image/png"/>	</item>
	</channel>
</rss>
