2014-07-10 13 views
6

ho costruita nginx su un sistema FreeBSD con i seguenti parametri di configurazione:nginx WebDAV potrebbe non raccolta aperta

./configure ... –with-http_dav_module

Ora, questo è il mio file di configurazione:

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/{ 
     } 
    } 
} 

Ora, il prossimo le cose che faccio sono controllare la sintassi del file di confiurazione emettendo un nginx -t e quindi eseguire una ricarica regolare come segue: nginx -s reload.

Ora, quando indico il mio browser Web all'indirizzo nginx-ip: 8080 ottengo l'elenco dei miei file e cartelle e così via e così via (penso che sia dovuto alla funzione autoindex on).

Ma il problema è che quando cerco di testare il WebDAV utilizzando cadavere come segue:

cadaver http://nginx-ip-address:8080/

mi chiede di immettere le credenziali di autorizzazione e poi, dopo che entro che mi dà il seguente errore:

Could not open Collection: 405 Not Allowed

E ciò che segue è la linea nginx-error-log che si verifica nello stesso momento:

*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"

Il nome utente e passare funzionano bene wheni tenta di accedere dal browser web, allora che cosa sta succedendo qui?

risposta

11

Si scopre che il modulo webdav integrato in nginx è danneggiato e per abilitare il webdav completo, è necessario aggiungere il seguente modulo di terze parti esterno: nginx-dav-ext-module.

link alla sua GitHub: https://github.com/arut/nginx-dav-ext-module.git

Il parametro di configurazione sarebbe ora:

./configure --with-http_dav_module --add-module=/path/to/the/above/module

Il costruito in uno solo fornisce i metodi DAV PUT DELETE MKCOL COPY MOVE.

Il-ext-module nginx-DAV aggiunge i seguenti metodi DAV aggiuntivi: PROPFIND OPTIONS

Sarà inoltre necessario modificare il file di configurazione per aggiungere la seguente riga:

dav_ext_methods PROPFIND OPTIONS;

Dopo aver fatto quindi controlla se la sintassi del file conf è intatta emettendo: nginx -t

e poi ricarica delicatamente (con garbo) nginx: nginx -s reload

E Voilà! ora dovresti essere in grado di usare il cadavere o qualsiasi altro programma client di dav per entrare nelle directory.

Non posso credere di averlo risolto, mi ha fatto impazzire per un po '!

+0

Il pacchetto 'nginx-full' in Ubuntu 12.04 sembra utilizzare questo' nginx-dav-ext-module' (vedere: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=667908) , quindi aggiungendo semplicemente "dav_ext_methods PROPFIND OPTIONS", per me andava bene. – ymonad

+0

sì è vero, ma sto usando una versione modificata specifica di freebsd senza supporto per le porte! – surajravi

+0

Sono su Archlinux e non sono un programmatore professionista (sono un medico nella vita reale). Potete fornire istruzioni per caricare il modulo WebDAV in Archlinux? Il metodo "./configure --with-http_dav_module --add-module =/path/to/the/above/module" funziona per Debian/Ubuntu. Ci scusiamo per questa domanda senza dubbio ingenua! – aag

Problemi correlati