本地+外网 md 笔记记录、同步、保存、加密软件 Joplin。
应该支持全平台,直接上 Joplin。
整体要求:
linux + nginx + webdav + 手机 + 电脑
在原有 Nginx 基础上进行 nginx 二次编译。
依赖
apt install libxml2 libxml2-devel libxslt-devel apache2-utils
拉取模块
cd /mnt/usb/lnmp/
git clone https://github.com/arut/nginx-dav-ext-module.git
git clone https://github.com/openresty/headers-more-nginx-module.git
编译新 nginx
./configure --prefix=/usr/local/nginx \
--user=www \
--group=www \
--error-log-path=/usr/local/nginx/logs/error_nginx.log \
--http-log-path=/usr/local/nginx/logs/access_nginx.log \
--with-openssl=../openssl \
--with-pcre=../pcre \
--with-pcre-jit \
--with-zlib=../zlib \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gzip_static_module \
--with-http_perl_module \
--with-stream \
--with-stream_ssl_module \
--with-http_dav_module \
--add-module=../nginx-dav-ext-module \
--add-module=../headers-more-nginx-module
目录准备
mkdir -pv /tmp/webdav/
mkdir -pv /mnt/usb/wwwroot/webdav/
chown www:www /mnt/usb/wwwroot/webdav/
chmod 700 /mnt/usb/wwwroot/webdav/
账号/密码
htpasswd -bc /usr/local/nginx/.htpasswd leeyr leeyr
# https://tool.oschina.net/htpasswd
授权
chown www:www /usr/local/nginx/.htpasswd
chmod 600 /usr/local/nginx/.htpasswd
vhost_nginx.conf
server {
listen 83;
server_name webdav;
#access_log off;
# 虚拟个 webdav 目录
location /webdav {
# 软连接到实际目录
alias /mnt/usb/wwwroot/webdav/;
charset utf-8;
# http 访问时列出目录
autoindex on;
# 显示时间为文件的服务器时间
autoindex_localtime on;
# 显示文件大小 单位 kB MB GB
autoindex_exact_size off;
# 认证
auth_basic realm_name;
auth_basic_user_file /usr/local/nginx/.htpasswd;
# Nginx 自带方法
dav_methods PUT DELETE MKCOL COPY MOVE;
# nginx ext 自带方法
dav_ext_methods PROPFIND OPTIONS;
# 新建文件/夹 权限,预设 user:rw。若指定 all 及 group 权限, 则 user 可忽略
dav_access user:rw group:rw all:r;
# 临时中转目录
client_body_temp_path /tmp/webdav/;
# 上传档案最大限制, 0 为不限制
client_max_body_size 0;
# 在现有目录中如果指定的文件夹不存在, 自动创建
#create_full_put_path on;
# 仅限内网设备访问
limit_except GET {
allow 192.168.2.0/24;
deny all;
}
# 处理某些 WebDAV 客户端增删改问题
#
#
set $dest $http_destination;
if (-d $request_filename) {
rewrite ^(.*[^/])$ $1/;
set $dest $dest/;
}
if ($request_method ~ (MOVE|COPY)) {
more_set_input_headers 'Destination: $dest';
}
if ($request_method ~ MKCOL) {
rewrite ^(.*[^/])$ $1/ break;
}
}
}
重启 nginx
service nginx restart
打开地址输入密码即代表成功。
http://192.168.2.100:83/webdav
外网
- 内网穿透。
- 外服搭建 WebDav,单向同步到本地某文件夹备份,这只是安全的第一道险。
笔记工具
- typora 支持 Windows、Mac、Linux,仅编辑器
- marktext 支持 Windows、Mac、Linux,仅编辑器
- liandi 支持 Windows、Mac、Linux,仅编辑器
- PandaNote,支持 iOS,可同步
joplin,全平台,可同步
文件工具
cyberduck 同步文件 https://cyberduck.io/download
上传文件 CPU 占用情况:
其它
webdav支持方法
PROPFIND 和 GET
PROPFIND 是查找资源的信息,并不包括资源的内容。而 GET 方法是直接返回资源的具体内容。在 PROPFIND 中,你可以指定返回资源的哪些属性信息,也可以返回资源的所有属性信息(allprop)。
PROPPATCH
对资源的某个或者某些属性进行操作,这个操作可以是增加,删除,修改等。
MKCOL
就是创建 Collection,Collection 的意思就是文件夹,它对应一个 URI 路径。这个命令创建的 Collection 如果事先存在,或者前置的路径不存在,都会报错。
POST
POST 方法的实际作用在 Webdav 的协议中没有做强制定义,一般都是由具体的应用场景的 Server 进行定义的。
DELETE
DELETE 就是删除操作,它可以删除资源,也可以删除一个 Collection。但是删除资源的时候,要求被删除的资源不能有锁。
如果是删除一个 Collection,要求这个 Collection。
LOCK 和 UNLOCK
对一个已经存在的资源加锁或者解锁操作。
COPY
COPY 复制一个文件到目标文件夹,目标文件夹必须存在
PUT
PUT 是用来更新服务器上的一个文件的,它不能作用于文件夹。
解决一些错误日志
# 路径
~/nginx-1.17.9/src/http/modules/ngx_http_dav_module.c
# 注释掉 line 637~
/*
if ((r->uri.data[r->uri.len - 1] == '/' && *(last - 1) != '/')
|| (r->uri.data[r->uri.len - 1] != '/' && *(last - 1) == '/'))
{
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
"both URI \"%V\" and \"Destination\" URI \"%V\" "
"should be either collections or non-collections",
&r->uri, &dest->value);
return NGX_HTTP_CONFLICT;
}
*/
解决报错:PROPFIND : Unknown error 2 (403): <html> <head><title>403 Forbidden</title>
server {
limit_except GET {
allow 10.1.1.0/24; <== 局域网 IP
deny all;
}
}
更新 2020-02-10