nginx对webdav支持不好的解决办法
nginx虽然应用的很多,但是对webdav的支持非常差,一些方法不支持,目前网上最多的方法是安装nginx-dav-ext-module模块,项目地址nginx-dav-ext-module,这个模块安装以后确实能解决问题,但是仍然有nginx原生问题没有解决。
方案一:nginx-dav-ext-module
安装麻烦,要重新编译nginx,./configure &./make,保存nginx-dav-ext-module的文件夹还不能删,否则白搞了,最重要的是原生问题不能解决,即:
nginx和webdav模块同时使用时,不能显示隐藏文件夹!
nginx不管是用自带的webdav还是dav-ext-module模块,对于目录下的./隐藏文件夹,都无法显示,虽然是个小问题,但是确实有影响,例如joplin使用webdav同步时,joplin的资源文件都是放在 ./resource文件下,这个文件nginx和webdav不能显示出来,因此不能很好的同步,当然目前这套方案也有解决办法:
#557 (autoindex_show_hidden_files (autoindex feature option to show hidden files) – nginx
没有验证,确实不想做这么复杂的操作了,,,
有的人验证了webdav这么显示隐藏文件夹呢?
接下来是我用的方案二
方案二:使用第三方webdav应用,并用nginx反向代理
项目地址:hacdias/webdav: A simple and standalone WebDAV server.
项目支持的非常好,当然你也可以用其它的webdav服务端,比如flydav等,但是这个webdav比较轻量。
这个webdav跑起来以后,直接nginx反代,而且是用二级目录代理,直接上nginx配置:
location /webdav/ {# 确保proxy_pass末尾有斜杠,以去除/webdav/前缀proxy_pass http://localhost:8080/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header Authorization $http_authorization;proxy_method $request_method;proxy_http_version 1.1;proxy_request_buffering off;client_max_body_size 0;if ($request_method = OPTIONS) {add_header Access-Control-Allow-Origin "*";add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, MKCOL, COPY, MOVE, PROPFIND, OPTIONS";add_header Access-Control-Allow-Headers "Authorization, Content-Type";add_header Access-Control-Allow-Credentials "true";add_header Content-Length 0;add_header Content-Type text/plain;return 204;}}
配置二级目录代理太好了!
仅跑个应用,然后配置下nginx,不用去编译nginx,此方案非常简单,推荐!