我在freebsd系统上使用以下配置参数构建了nginx:
./configure ... –with-http_dav_module
现在这是我的配置文件:
user www www;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
# reserve 1MB under the name 'proxied' to track uploads
upload_progress proxied 1m;
sendfile on;
#tcp_nopush on;
client_max_body_size 500m;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
#upload_store /var/tmp/firmware;
client_body_temp_path /var/tmp/firmware;
server {
server_name localhost;
listen 8080;
auth_basic "Restricted";
auth_basic_user_file /root/.htpasswdfile;
create_full_put_path on;
client_max_body_size 50m;
dav_access user:rw group:r all:r;
dav_methods PUT DELETE MKCOL COPY MOVE;
autoindex on;
root /root;
location / {
}
}
}
现在,我接下来要做的是通过发出nginx -t
检查配置文件的语法,然后按如下方式进行正常重新加载:nginx -s reload
。
现在,当我将我的网络浏览器指向nginx-ip-address:8080时,我会得到我的文件和文件夹列表等等(我认为这是由于功能上的自动索引)。< / p>
但问题是当我尝试使用尸体测试webdav时如下:
cadaver http://nginx-ip-address:8080/
它要求我输入授权凭证然后在我输入之后它会给我以下错误:
Could not open Collection: 405 Not Allowed
以下是同时出现的nginx-error-log行:
*125 no user/password was provided for basic authentication, client: 172.16.255.1, server: localhost, request: "OPTIONS / HTTP/1.1", host: "172.16.255.129:8080"
当我尝试从网络浏览器访问它时,用户名和传递工作正常,那么这里发生了什么?
答案 0 :(得分:11)
事实证明,内置在nginx中的webdav模块已损坏并启用完整的webdav,我们需要添加以下外部第三方模块:nginx-dav-ext-module。
链接到其github:https://github.com/arut/nginx-dav-ext-module.git
configure参数现在为:
./configure --with-http_dav_module --add-module=/path/to/the/above/module
内置的只提供PUT DELETE MKCOL COPY MOVE
dav方法。
nginx-dav-ext-module添加了以下额外的dav方法:PROPFIND OPTIONS
您还需要编辑配置文件以添加以下行:
dav_ext_methods PROPFIND OPTIONS;
执行此操作后,通过发出:nginx -t
然后软重装(优雅地)nginx:nginx -s reload
而且瞧!你现在应该可以使用尸体或任何其他dav客户端程序进入目录。
我无法相信我解决了这个问题,它让我疯了一会儿!