WebDavとNginx

ご挨拶、紳士。



少し前まで、私のプロジェクトの1つで、受信側のハンドラスクリプトなしで、PUTメソッドを使用してファイルを転送できるようにする必要がありました。サーバー自体がファイルを受け入れて処理する必要がありました。 また、Apacheではなく、対応するNginxでこれを実装することもタスクでした。



私の研究の結果、私はそのようなスキームを得ました-PHPスクリプトはファイルアドレスを受け取り、サーバーにリクエストを行い、次にファイルを受け取り、それを必要なフォルダーに追加します。



debianベースのOSに基づいた対話のインストール、設定、およびテストのさらなる例を引用します。







サーバー側、Nginx



必要なモジュールを使用してサーバーをダウンロード、コンパイル、インストールします。



wget nginx.org/download/nginx-1.1.1.tar.gz

tar -xvf nginx-1.1.1.tar.gz

cd nginx-1.1.1



./configure --sbin-path=/usr/sbin --conf-path=/etc/nginx/nginx.conf \

--error-log-path=/var/log/nginx/error.log \

--pid-path=/var/run/nginx.pid \

--lock-path=/var/lock/nginx.lock \

--http-log-path=/var/log/nginx/access.log \

--http-client-body-temp-path=/var/lib/nginx/body \

--http-proxy-temp-path=/var/lib/nginx/proxy \

--http-fastcgi-temp-path=/var/lib/nginx/fastcgi \

--with-http_stub_status_module \

--with-http_ssl_module \

--with-http_dav_module



make && make install








構成を構成します。

コンパイル時に、構成ファイルが/etc/nginx/nginx.confにあることを示しました



安全で便利な別のポートでwebdavを動作させる必要があるため、新しいサーバーセクションを登録しています。



server {

listen 7500; # nginx

server_name ip--;

charset utf-8;



location /{

expires max;

root ////; # PUT'

client_max_body_size 20m;

client_body_temp_path /usr/local/nginx/html/;

dav_methods PUT; # , PUT



create_full_put_path on; # , , nginx

dav_access user:rw group:r all:r; #



limit_except GET {

allow all;

}

}

}








また、構成されたモジュールでは、Nginx構成ファイルで指定された他のWebDavディレクティブも機能します:DELETE、MKCOL、COPY、MOVE。



クライアント側、2番目のサーバー、PHPスクリプト



$ namefile変数には、何らかの方法で取得されたfile.zip形式のファイル名が既に含まれているとしましょう。



$url = "ip--:7500/$namefile";

$file = "/files/$namefile";



$fp = fopen($file, "r");

$curl = curl_init();



curl_setopt($curl, CURLOPT_VERBOSE, 1);

curl_setopt($curl, CURLOPT_URL, $url);

curl_setopt($curl, CURLOPT_PUT, 1);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($curl, CURLOPT_INFILE, $fp);

curl_setopt($curl, CURLOPT_INFILESIZE, filesize($file));



curl_close($curl);

fclose($fp);








まとめ



これですべてがインストールおよび構成されたので、スクリプトに戻り、ファイルへのパスを転送すると、スクリプトはファイルをサーバーに転送します。これにより、PHP、Perl、または別の言語で書かれたハンドラーがなくても、ファイルを受け入れて別のサーバーに配置できます。



私がお辞儀をするために、書かれたテキストがあなたにとって興味深いものであったことを願っています。



All Articles