Nginx

[Nginx] WebDAVによるファイルストレージサーバを構築

最近知ったけど、http通信でファイルをストレージにアップロードしたり、取得する機能はWebDAV(ウェブダブ、Web-based Distributed Authoring and Versioning)っていうらしいのね

今回はNginxでそれを作ってみた

WebDAVとは

俺はファイルのアップロード、ダウンロードってFTPでやるんとちゃうん?・・

て思ってたら、よく考えたらGoogleドライブのようにhttp通信でファイルをアップロードしたりダウンロードってよくされているなと。

このように、http通信でファイル管理ができる機能をWebDAVである。と

 

サンプルプロジェクト

今回作った検証環境はこちらのリポジトリからダウンロードできます。https://github.com/smithshiro/docker_webdav_sample

 

設定

docker-compose.yaml

アップロードされたファイルはfilesディレクトリに入るようになっているのがミソ

 

default.conf

WebDAVを利用するために出てきた新しいディレクティブの紹介をします。

client_max_body_size

コンテキスト http, server, location
説明 アップロードできるファイルの最大容量
デフォルト値 1m

デフォルトで1mだと、でかいファイルをアップロードしたいっていう要望は満たせなかったりするので、このディレクティブで調整必須

client_body_temp_path

コンテキスト http, server, location
説明 リクエストのボディを一時的に保存するパス
デフォルト値 /var/cache/nginx/client

dav_methods

コンテキスト http, server, location
説明 WebDAVで使用できるメソッドを指定する
デフォルト値 off

アクセスを許可するHTTPメソッドを指定するため必須(例えば、削除を許可しないならDELETEを加えないとか

create_full_put_path

コンテキスト http, server, location
説明 アップロード先ディレクトリの自動生成を有効無効
デフォルト値 off

アップロード先にディレクトリが存在しなかったときに自動作成したい場合はonにする必須

dav_access

コンテキスト http, server, location
説明 作成するファイルやディレクトリのパーミッションを指定する
デフォルト値 user:rw

作成時に他のユーザからの読み込みや書き込みの権限を制御するため必須

検証

curlコマンドを使ってファイルのアップロード、ダウンロードができるのを検証してみる

ファイルをアップロード

201ってステータスになった!

ちゃんとファイルあるね

ファイルをダウンロード

ダウンロードもできた

いい感じ!

まとめ

  • WebDAVの機能でhttp通信ベースでサーバのファイルアクセスができる
  • NginxだけでもWebDAVは許可するファイルサイズや、通信方式、ファイルの読み書き権限など色々設定して提供することができる

所感

上の例だと外部ネットワークから簡単にあくせすできてしまってやばいので、

実践では内部ネットワークからしかアクセスできないようにするとか、ベーシック認証とか取り入れるとか必要やね

nginx実践入門
nginxを現場で活用するための知識を、実践的なノウハウを交えて解説した書籍です。
nginxのインストール方法や基本的な設定方法からはじめ、nginxを利用した「静的コンテンツ配信サーバ」「HTTPSサーバ」「Webアプリケーションサーバ」「大規模コンテンツ配信システム」の構築方法をそれぞれ詳しく紹介しています。後半ではnginxサーバのモニタリングやログの収集、そして軽量スクリプト言語Luaでnginxを拡張する方法について解説しているので、nginxをこれから使う方はもちろん、さらに活用したい方にもお勧めです。

-Nginx

© 2021 Shiro's secret base