WebDAV機能のnginxの修理

あなたはファイル共有のためにWebDAVを使用する場合は、特に、その後、Apacheのことで、その後、まだ、心配、ファイルシステムをマウントする組み込み機能のオペレーティングシステムを使用します。

以下は、この目標を達成するためにnginxのを使用する方法について説明します。Windowsは組み込みのクライアントのMicrosoft-WebDAVの-MiniRedirで、MacOSのはWebDAVFSダーウィンがあり、LinuxはGVFSです。

最初の必要性あなたのnginx-DAV-EXT-モジュール、そうでない場合は任意のWebDAVクライアントが動作しないことができる、彼らはPROPFINDコマンドはディレクトリをリストすることができませんサポートしていないため。Windowsの/ MacOSの書き込みファイルがLOCKコマンドを必要とし、Linuxが必要とされていません。

構成された後の文書によると、ネットワークディスクをマウントし、[OK]を、その後、それは不可能、新しいフォルダや名前の変更、フォルダを作成することが分かっ......誰のオペレーティングシステムは、生き残ることはできません......

ここでは、2つの方法があります。

コンパイルするソースコードを変更します。

ちょうどライン上でコードを削除し、あなたが公式BUG--にないことはできません私のせいに言及して恥ずかしいですリードいかなる新しいコードを、記述する必要はありません、彼らはカードを非合法化していない、Windowsの/ MacOSの/ Linuxののせいです。

ngx_http_dav_module.c

ライン504は、それが決定さMKCOL URI命令は「/」で終わる必要があり、最後に「/」は、オペレーティング・システムの互換性MKDIR「a」および「A /」の形式の関数が実際にあるときに除去されているオペレーティングシステムレイヤに渡されます。

Windowsの/ MacOSの/ Linuxはマウントフォルダの原因を作成することはできません。

    // IF(R-> uri.data [R-> uri.len - 1]!= '/'){
     //      ngx_log_error(NGX_LOG_ERR、R-> Connection(接続) - > Connectログ、0、
     //                    「MKCOL作成することができコレクションのみ");
    //      戻りNGX_HTTP_CONFLICT。
    // } 

    P = ngx_http_map_uri_to_path(R&経路、および根、0 );
    もし(p == NULL){
         戻りNGX_HTTP_INTERNAL_SERVER_ERRORと、
    } 

    // *(P - 1)= '\ 0'。
    // R-> uri.len--。

 ライン636は、URI、MOVE命令とデスティネーションの終了を決定し、「/」と一致しなければなりません、実際には、同じ名前の変更機能「」および「A /」と互換性のあるオペレーティングシステム、ファイル、フォルダを変更することはできません。

MacOSのはと/、先なし/最後のフォルダ--uri両端の名前は変更しない理由の一つ。

 // == '/' && *(最後! - 1)= '/') - ((R-> uri.data [1 R-> uri.len]もし
     //      ||(R-> uri.data [R-> uri.len - 1] = '/' && *!(最後- 1)== '/'))
     // {
     //      ngx_log_error(NGX_LOG_ERR、R-> Connection(接続) - > Connectログ、0、
     //                    "両方のURI \" %のV \ "と\ "先\" URI \ "%のV \""
     //                    "コレクションや非コレクションのどちらかでなければなりません"、
     //                    &R-> URI、&dest->値);
    //      戻りNGX_HTTP_CONFLICT。
    // }

 MOVEは、フォルダのタイプであれば764ライン、そして、URIは、「/」、同上、互換性のあるオペレーティングシステムの名前の変更機能で終わらなければなりません。

■Windows / Linuxには、フォルダの理由の名前を変更することはできません、MacOSの第二の理由は、フォルダの名前を変更することはできません。

        // IF(R-> uri.data [R-> uri.len - 1]!= '/'){
         //      ngx_log_error(NGX_LOG_ERR、R-> Connection(接続) - > Connectログ、0、
         //                    "\" %のV \、&R-> URI) "コレクションです"。
        //      リターンNGX_HTTP_BAD_REQUEST。
        // }

彼は再コンパイルした後、Windowsの/ MacOSの/ Linuxは基本的に利用可能なネットワーク-時間をマウントします。

しかし、Windows上では、ファイルがまだ利用できないアップロードし、新しいファイルを作成することができます。Windowsファイルコピー時間後に頑固ため不足のPROPPATCHコマンドを、元のファイルと同じに新しいファイルを入れて、この操作がストライキを完了することができない、MacOSの/ Linuxは、この操作をしません。Windowsは、更新されたツールは、多くの場合、誤判定などを行うかどうかを判断するためのファイルの時間で、実際にこの習慣に非常に友好的です。時間はサーバー時間の後ろにファイルをアップロードするので、私は時々、アップロード新しいファイルが更新スクリプトをトリガすることができないときに見つかったときに実行するようにApacheとWebDAVを。

誰かが提供しています偽のPROPPATCHが PROPFINDが直接命令処理であるとして、実現しています。より良い権利の実現よりも私の意見では、Windowsのの頑固な行動の人々が過敏に起因するエラーを回避します。

プロファイル

あなたが設定ファイルを使用して、それを自分でコンパイルしたくない場合は解決することができます。

MKCOLはないで終わります/

もし($ REQUEST_METHOD = MKCOL){リライト^(。* [^ /])$ $ 1 /ブレーク。}

Windows MOVEフォルダの下に/で終わっていません

もし( - D $のREQUEST_FILENAME){ 
    リライト ^ $ $(* [^ /]。)1 / 
    $ MDを設定 / 
}

フォルダ先が/で終わっていない名前を変更し、それが必要であるヘッダ-より-nginxのモジュール

X $ http_destination $ REQUEST_METHOD $を設定します。
もし($ X〜[^ / ] MOVE){ 
    more_set_input_headers -r " 宛先:$ {http_destination} $ {MD} " 
}

PROPPATCHなし命令処理PROPFIND。

proxy_method PROPFIND; 
proxy_paramsが含まれます。
もし($ REQUEST_METHOD = PROPPATCH){ 
    proxy_passます。http:// 127.0.0.1; 
}

 キックは一日、それを呼び出します。

おすすめ

転載: www.cnblogs.com/yunteng/p/12449604.html