全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 2352|回复: 19
打印 上一主题 下一主题

Rclone搭建Webdav服务+Systemd保活+Nginx反代+CF加速一条龙

[复制链接]
跳转到指定楼层
1#
发表于 2023-2-1 23:50:26 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
废话少说直接上实战:
首先是部署 rclone 二进制和生成密码:

# adduser webdav # su - webdav && mkdir rclone && cd rclone
$ wget https://downloads.rclone.org/v1.61.1/rclone-v1.61.1-linux-amd64.zip
$ unzip rclone-v1.61.1-linux-amd64.zip && mv rclone-v1.61.1-linux-amd64/rclone ./ && rm -rf rclone-v1.61.1-linux-amd64*
$ exit
# cd /home/webdav/rclone && apt-get install apache2-utils && touch htpasswd && htpasswd -B htpasswd webdav_user1
# vim /etc/systemd/system/webdav.service


然后就是配置 systemd 进程保活,将下面的配置复制粘贴进入 vim 编辑器中:

[Unit]
Description=my webdav service
After=network.target
[Service]
User=webdav
# Execute `systemctl daemon-reload` after ExecStart= is changed.
ExecStart=/home/webdav/rclone/rclone serve webdav /home/webdav/Myspaces --addr 127.0.0.1:5000 --htpasswd /home/webdav/rclone/htpasswd
[Install]
WantedBy=multi-user.target


然后将执行下面的命令验证一下服务是否正常和端口是否起来了:

# systemctl daemon-reload && systemctl start webdav && systemctl status webdav
# netstat -lnptu


再然后就是 Nginx 反代了,以下配置由军哥的 lnmp.org 旗下的 lnmp vhost add 命令生成:

server
{
listen 80;
#listen [::]:80;
server_name www.webdav.sharpgan.com webdav.sharpgan.com;
index index.html index.htm index.php default.html default.htm default.php;
#include rewrite/none.conf;
#error_page 404 /404.html;
# Deny access to PHP files in specific directory
#location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ {deny all;}
include enable-php.conf;
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
location ~ /.well-known {
allow all;
}
location / {
return 301 https://$host$request_uri;
}
access_log /home/wwwlogs/www.webdav.sharpgan.com.log;
}
server
{
listen 443 ssl http2;
#listen [::]:443 ssl http2;
server_name www.webdav.sharpgan.com webdav.sharpgan.com;
index index.html index.htm index.php default.html default.htm default.php;
ssl_certificate /usr/local/nginx/ssl/cer.pem;
ssl_certificate_key /usr/local/nginx/ssl/pri.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers "TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
ssl_session_cache builtin:1000 shared:SSL:10m;
# openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048
ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
include rewrite/none.conf;
#error_page 404 /404.html;
# Deny access to PHP files in specific directory
#location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ {deny all;}
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;
}
access_log /home/wwwlogs/www.webdav.sharpgan.com.log;
error_log /home/wwwlogs/error.webdav.sharpgan.com.log;
}


你最好是执行一下军哥的命令生成一下,因为前者会帮你生成/usr/local/nginx/conf/ssl/dhparam.pem 这个东西,不太懂,好像跟安全有关。

上面的证书我用的是 cf 的 15 年免费的通配符证书,军哥的命令会提醒你输入证书的路径,照着提示弄就行,实在不太明白的参考一下下面这篇军哥的博客:
https://www.vpser.net/build/lnmp-wordpress-howto-3.html

我来说一下这里面最核心的部分:

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;
}


这段 Nginx 的配置是整个反代的核心配置。
再然后就是下面这段:

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;
}


如果少了这一段部分应用用 POST 方法上传 js 和 png 等静态文件时 Nginx 那边会报 method not allowed: 405 错误。

这一段配置是我自己摸爬滚打参考了无数博客试验出来的,貌似全网独一无二,网上主流的做法是加一段“error_page 405 =200 http://$host$request_uri;”这样的配置,但是这个配置加了之后我常用的一个可以同步 webdav 的同步软件 goodsync 会报奇怪的错误,所以也就是说主流的做法没卵用。

最后就是配置 CF 的 DNS 解析了,相信 mjj 们都会配置我就不赘述了,这里说一个小点,就是 www.webdav.sharpgan.com 这样的 DNS 解析配置是不受 CF 的通配符证书所支持的,因为 CF 只支持域名往下一级的子域名,这里把 www. 去掉就行了。

最后展示一下实战效果,以我常用的支持 webdav 同步的同步软件 goodsync 为例:
喜欢代码高亮的和需要看实战效果的mjj移步我的博客哈:
https://sharpgan.com/rclone-webdav-service-with-systemd-and-nginx-and-cloudflare/
20#
发表于 2023-2-25 12:57:14 | 只看该作者
本帖最后由 Darkside 于 2023-2-25 13:41 编辑

好东西,支持支持
19#
 楼主| 发表于 2023-2-2 09:35:38 来自手机 | 只看该作者
和弦的颤栗曲 发表于 2023-2-2 08:59
第一次听说这种说法

希望CF手下留情
18#
发表于 2023-2-2 08:59:57 | 只看该作者
Typeboom 发表于 2023-2-2 01:43
虽然但是,如果这样用Cloudflare,流量大了之后,媒体文件会全部被替换成三秒教育片 ...

第一次听说这种说法
17#
 楼主| 发表于 2023-2-2 08:10:51 来自手机 | 只看该作者
cici9911 发表于 2023-2-2 03:07
支持一下!以前自己搞了很久没搞好. 有没有简化版的仅http的

你看看军哥的lnmp命令添加nginx的vhost的时候到了添加ssl证书可以不添加不,或者你直接把我那两段核心配置拷贝到80里面也行,如果不介意付费的话可以远程帮你弄一下
16#
 楼主| 发表于 2023-2-2 08:06:04 来自手机 | 只看该作者
letzvps 发表于 2023-2-2 07:52
看了你言论,webdav是啥你应该完全不知道

有科普链接么发一下我来学习一下,我理解webdav和ssh一样只是一个网络协议,虽然带web界面的ssh满天飞,但是正常来讲裸连ssh就够用了,没必要用web,前面说的不太严谨,webdav可以带个index的web界面,但是像alist那样单独弄个配置webdav文件夹账号密码的就有点对小鸡来说负担太重了,命令行纯文本配置一下最清爽,当然alist是个私有云网盘,web界面必不可少,web界面里面管理webdav的账号密码是附加的,纯webdav服务实在没要带个管理的web界面
15#
 楼主| 发表于 2023-2-2 07:55:48 来自手机 | 只看该作者
Typeboom 发表于 2023-2-2 01:43
虽然但是,如果这样用Cloudflare,流量大了之后,媒体文件会全部被替换成三秒教育片 ...

哦哦,多谢MJJ提醒,我主要是上传一些几百K或者几兆的HTML网页文件,感觉应该没事
14#
发表于 2023-2-2 07:52:57 来自手机 | 只看该作者
sharp097 发表于 2023-2-2 07:48
那啥apache和nginx搭建的webdav不都是没有web界面的么,一个service就老老实实的做个service,小鸡只有2G ...

看了你言论,webdav是啥你应该完全不知道
13#
 楼主| 发表于 2023-2-2 07:48:47 来自手机 | 只看该作者
letzvps 发表于 2023-2-2 01:00
那webdav为什么叫web? 竟然还发明一个webdav service? 哪个半吊子发明的?

那啥apache和nginx搭建的webdav不都是没有web界面的么,一个service就老老实实的做个service,小鸡只有2G内存多了web界面负担太重了~
12#
 楼主| 发表于 2023-2-2 07:45:27 来自手机 | 只看该作者
AceSheep 发表于 2023-2-2 01:28
nginx 就可以开 webdav 功能, 反代多此一举

nginx的webdav依赖一个第三方用C语言写的dav模块,这个模块的github仓库已经4年没更新了,实在不敢用,怕出问题,另外我用了军哥的lnmp,好像没找到单独卸载nginx的方法,因为nginx搭建webdav最简单的方法就是装ubuntu的nginx-full包,我怕不卸载直接装会有冲突~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2025-12-24 13:24 , Processed in 0.103098 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表