CentOS7複数サーバーでファイル情報を同期するWebDAV設定

#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="apache２のホスト名/apache２のグローバル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