WebDAVのファイル操作を複数サーバー間で行う
今回は、Webサーバー上のファイルをWebブラウザなどから共有ができるWebDAVの設定について取り上げていきます。
またロードバランサーなどで実サーバーを複数割り当てているためファイル情報を同期する必要があり、lsyncdでサーバー間の同期設定も行っていきます。
前提条件
・グローバルIPアドレスが割り振られたapache(2.4)インストール済みのCentOS7サーバ2台
・ロードバランサー(今回はさくらのクラウドのGSLBを使用)
※ドメインを取得していないため、今期はDNSを使用しない
そもそもWebDAVとは?
WebDAVとは、WebブラウザーとWebサーバーが80番ポートを使って通信するHTTPを拡張し、Webブラウザー場でWebサーバー上の操作が行える仕組みです。
そのためWebサーバー上のフォルダーやファイルに対し、Webブラウザーからアクセスするだけで書き込みや読み込み、コピー、削除といったこと操作を行うことができます。
また、通信プロトコルがHTTPなので、新たにファイアーウォールでポートを開いたりする必要もないことが特徴です。
そもそもlsyncdとは?
lsyncd (Live Syncing Daemon)は、リアルタイムでフォルダーやファイルの変更情報を同期してくれる仕組みです。
このlsyncdのリアルタイムの同期は、異なるサーバー間でも可能。
そのため今回このlsyncdを設定することによって、ロードバランサーでどのapacheサーバーに割り当てられても変更内容を同期できるような設定をしていきます。
lsyncd設定
WebDAVでの設定を別のサーバーでも反映するために、まずはlsyncdの設定を行なっていきます。
ここでは、1台目の同期元のサーバーをapache1、2台目の同期先のサーバーをapache2とします。
rsyncdのファイル同期設定
まずファイルの同期設定をするために、CentOS7デフォルト搭載のファイルやディレクトリの同期が行えるrsyncdを使用。
同期先であるapache2の/etc/rsyncd.confに、同期元であるapach1のホスト情報などを記載し、systemctlでrsyncdを起動していきます。
# vi /etc/rsyncd.conf
# 任意の名前を設定
[asyncd]
# apache1の同期したを記載
path = /var/www
# apache1のホスト情報を記載
hosts allow = apache1のグローバルIPアドレス
hosts deny = *
list = true
uid = root
gid = root
read only = false
# systemctl enable rsyncd
# systemctl start rsyncd
rsyncdのアクセス許可設定
同期設定のrsyncdはポート873を使用するので、同期先であるapache2のfirewallでポート873を許可します。
# firewall-cmd --add-port=873/tcp --permanent
# firewall-cmd --reload
rsyncdで同期コマンド
同期元であるapache1の/var/wwwの情報を、同期先であるapache2の/etc/rsyncd.confを参照し(任意の名前で記載した[asyncd]下の設定)、同期を行います。
# rsync -avz --delete --exclude-from=/etc/rsync_exclude.lst /var/www apache2のグローバルIPアドレス::asyncd
これでひとまず、同期設定は完了です。
lsyncd設定
次にrsyncdでの同期設定を、リアルタイムで行えるようにlsyncdの設定をします。
まずは、同期元のapache1でlsyncdをインストール。
# yum --enablerepo=epel -y install lsyncd
リアルタイム同期設定
続いて同期元のapache1で/etc/lsyncd.conf内に、リアルタイムで同期したいapache2のディレクトリやホスト情報を記載します。
# vi /etc/lsyncd.conf
# デフォルトで下記が記載しているため--でコメントにする
-- sync{default.rsyncssh, source="/var/www/html", host="localhost", targetdir="// tmp/htmlcopy/"}
settings{
statusFile = "/tmp/lsyncd.stat",
statusInterval = 1,
}
sync{
default.rsync,
# 同期元ディレクトリ指定
source="/var/www/",
# 同期先のホスト名/IPアドレス:(apache2の/etc/rsyncd.confで設定した任意の名前)
target="apache2のホスト名/apache2のグローバルIPアドレス::asyncd",
}
# systemctl enable lsyncd
# systemctl start lsyncd
WebDAV設定
lsyncdで/var/www下のサーバー間リアルタイム同期設定が完了したところで、WebDAVの設定を行なっていきます。
WebDAVモジュールの確認
apache2.4では標準でWebDAVモジュールが搭載されていますが念の為、catコマンドでWebDAVモジュールがあるかということを確認します。
# cat /etc/httpd/conf/httpd.conf | grep LoadModule dav_module modules/mod_dav.so
# cat /etc/httpd/conf/httpd.conf | grep LoadModule dav_fs_module modules/mod_dav_fs.so
共有フォルダwebdavをドキュメントルート下に作成
/var/www/htmlのドキュメントルート下に、webdavを作成。
# mkdir /var/www/html/webdav
所有者・所有グループの設定
webdavディレクトリの所有者・所有グループをapacheに設定する記載します。
# chown apache:apache /var/www/html/webdav
WebDAVのパスワード設定
本来はSSL/TLS認証も必要ですが、ドメインを取得していないため、今回はパスワードのみ設定していきます。
まずはパスワード用のディレクトリと、パスワードの設定。
# mkdir /var/www/secure/webdav/
# htpasswd -c /var/www/secure/webdav/.htpasswd 任意のユーザー名
パスワードを入力
WebDAVの設定
新たに/etc/httpd/conf.d/下にwebdav.confを作成して、WebDAVの設定を記載していきます。
記載後、apacheを再起動。
# vi /etc/httpd/conf.d/webdav.conf
Alias /webdav/ "/var/www/html/webdav/"
<IfModule mod_dav.c>
DAVMinTimeout 600
<Location /webdav>
# WebDAVの設定・パスワード認証設定を記載
DAV On
AuthType Basic
AuthName "Login WebDAV"
AuthUserFile "/var/www/secure/webdav/.htpasswd"
Require valid-user
Order deny,allow
Deny from all
Allow from all
</Location>
</IfModule>
# systemctl restart httpd
ここまで完了したら、URLでGSLBのFDQN/webadvにアクセスし、設定したユーザー名とパスワードを入力後、フォルダ操作をWebブラウザー上で行えることを確認します。
また、リモート環境でフォルダやファイルを作成したら、apache1とapache2の/var/www/html/webdav下ででリアルタイムで同期されることも確認。
これで、Webブラウザー上でWebサーバーの設定が行えるWebDAVの設定と、その変更情報が複数のサーバーでリアルタイムに同期されるlsyncdの設定が完了です。
参考URL
https://www.kagoya.jp/howto/network/webdav/
http://kajuhome.com/webdav.shtml
https://www.server-world.info/query?os=CentOS_7&p=rsync
https://www.server-world.info/query?os=CentOS_7&p=lsync