由于在Nginx上无法使用PROPFIND 405,我尝试从源代码进行编译以构建WebDAV环境
WebDAV 网络文件管理协议
最近很熟悉的一个标准是”WebDAV”,这是由微软牵头制定的标准,但不知为何在Windows8上无法使用(准确地说是有些麻烦),似乎是被搁置一边的协议。不过它比FTP和scp门槛低,而且与最近的媒体播放器一样,除了支持DLNA以外还支持WebDAV,因此在家观看视频时非常方便。
因为已经在Apache上设置好了方便的环境,但是我在GW期间比较闲,所以决定尝试用Nginx搭建WebDAV环境。结果又遇到了问题。这是我的备忘录。
PROPFIND被禁止使用 (PROPFIND is prohibited)
我看了这篇文章“尝试使用yum快速创建环境,在nginx中使用WebDAV(不包含nginx-dav-ext模块)”,但当我从WebDAV客户端访问时,会出现405 PROPFIND错误。
192.168.11.1 - - [05/May/2015:08:40:23 +0900] "OPTIONS / HTTP/1.1" 405 166 "-" "Rei.Fs.WebDAV/1.11.12
如果你思考为什么?似乎是因为无法解释”PROPFIND,OPTIONS”这两个方法。在dav_methods中无法定义”PROPFIND, OPTIONS”。
WebDAV中的PROPFIND操作返回了405状态码。
只能从源代码编译了。
我会创建一个通常的vagrant环境,并在那里进行操作测试。因为要编译源代码,所以我要创建一个编译环境!
安装编译环境并下载nginx、nginx-dav-ext-module源码。
$ sudo yum install expat-devel
$ sudo yum install wget gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel gd gd-devel
$ wget http://nginx.org/download/nginx-1.9.0.tar.gz
$ tar zxvf nginx-1.9.0.tar.gz
$ cd nginx-1.9.0
$ git clone https://github.com/arut/nginx-dav-ext-module.git
编译选项将与通过yum安装的选项等效。重要的是要注意包括 –add-module=./nginx-dav-ext-module。
$ cd nginx-1.9.0
# ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --add-module=./nginx-dav-ext-module
$ make
$ sudo make install
创建一个Nginx用户。
$ sudo useradd -s/sbin/nologin -d/usr/local/nginx -M nginx
将nginx的启动/停止脚本文件下载到/etc/init.d/。如果启动时出现错误,请适当删除包含的额外字符串。
# cd /etc/init.d
# wget -O nginx "http://wiki.nginx.org/index.php?title=RedHatNginxInitScript&action=raw&anchor=nginx"
# chmod +x nginx
编写设置文件。
因为 /etc/nginx/nginx.conf 看起来有点不太好,所以我来进行修正。
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
server_tokens off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
}
我們將描述WebDav的定義。
在此之前,我会创建/etc/nginx/conf.d。
server {
listen 8888;
server_name localhost;
location / {
root /tmp;
# デフォルトのキャラクターコード
charset utf-8;
# ブラウザから確認するとき
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
# アップロードサイズの上限
client_max_body_size 100m;
# WebDAV設定
dav_methods PUT DELETE MKCOL COPY MOVE;
# nginx-dav-ext-module の拡張メソッド
dav_ext_methods PROPFIND OPTIONS;
# WebDAVでのアクセス権を設定
dav_access group:r all:r;
client_body_temp_path /tmp;
create_full_put_path on;
access_log /var/log/nginx/webdav.access.log;
error_log /var/log/nginx/webdav.error.log;
}
}
CarotDAV- 可以只需要一个选项用中文来释义.
我要試著從Windows的WebDAV客戶端軟體「CarotDAV」進行訪問。
下一次自然是:
如果是在本地环境中,各种限制会比较宽松,但至少要先设置Digest认证和SSL。所以我们试着建立一个环境。
现在,去吃午饭吧~