nginxをリバースプロキシにしてApacheでWebDavをホストする方法(SSL+BASIC認証)

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

仕事でWebDAVを構築する案件があったのですが、HTTPのサーバには既にnginxを使用しており、nginxのWebDAVはWindowsで不具合が多発する情報が入っていたものですから、nginxをリバースプロキシにしてApacheでWebDAVをホストすることにしました。

概要は、以下のとおりです。

  1. nginxは、WebDAVと通常のHTTPリクエスト両方を受け付ける。
  2. HTTPリクエストのうち、 example.com/webdav/以降のリクエストは、Apacheにリバースプロキシする
  3. Apacheは、ポート8081番でWebDAV専用として動かし、WebDAVのホストを行う
  4. 上記作業をSSL+BASIC認証で行う

手順。

【nginx側】SSLとリバースプロキシの設定

SSLの証明書は既に導入済みとします。
導入方法については、以下のページが参考になりました。

nginx + rapid-ssl導入 – わかりやすいよ

http://d.hatena.ne.jp/Kmusiclife/20120319/1332086260

以下のように設定する。

# vim /etc/nginx/conf.d/default.conf
# Webdav(Apache)にリバースプロキシ
upstream webdav {
    ip_hash;
    server localhost:8081;
}
 
server {
    server_name example.com;
    listen       443 default_server ssl;
    ssl on;
    ssl_certificate      /etc/nginx/conf.d/certs/ssl.pem;
    ssl_certificate_key  /etc/nginx/conf.d/certs/ssl.key;
    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers   on;
 
    root /var/www/web;
 
    index index.php index.html index.htm;
    access_log  /var/log/nginx/example.com.access.log;
    error_log   /var/log/nginx/example.com.error.log error;
    client_max_body_size 1024M;
 
 
    location /webdav/ {
       #/webdav以下のアクセスを全てリバースプロキシに渡す
       proxy_pass http://webdav;
    }
}

【apache側】confの設定

Apacheは今回リバースプロキシ経由でのアクセスになります。
なのでポート80番はnginxに譲り、8081番でホストすることにします。

まずはポート番号を変更します。

# vim /etc/httpd/conf/httpd.conf
# Change this to Listen on specific IP addresses as shown below to 
# prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
#
#Listen 12.34.56.78:80
#Listen 80 #ここをコメントアウト
Listen 8081

次に、WebDAVの設定用confファイルを作ります。

# vim /etc/httpd/conf.d/webdav.conf
Alias /webdav "/var/webdav"
RequestHeader edit Destination ^https http early
<Directory "/var/webdav">
    Dav On
    #SSLRequireSSL ← nginx - apache間はSSLにする必要がない
    AllowOverride None
    Options Indexes
    AuthType Basic
    AuthName WebDAV
    AuthUserFile /etc/httpd/conf/.htpasswd
    <LimitExcept OPTIONS>
        Require user webdav-user
    </LimitExcept>
</Directory>

RequestHeader……の部分は、nginxのhttps://宛に送られてくるヘッダー情報をapacheのhttp://宛に直すものです。これをしないと、一部のコマンド(名前の変更、ファイル移動)等が上手く動かず、502 bad gatewayとなります。

また、LimitExceptの部分を指定しないと、Windows7などでアクセスした際、「入力したフォルダーは有効ではないようです」とエラーが出て共有できません。Windows7のWebDAVクライアントは、BASIC認証の前にOPTIONSコマンドが通らなかった時点で有効ではないと判断するためです。
LimitExceptでOPTIONSだけは通るようにしてあげることで、BASIC認証まで無事進むことができます。

このあたりは結構トラップですね。

最後に、Webdav用ユーザのBASIC認証パスワードを作ります。

# vim /etc/httpd/conf/.htpasswd
webdav-user:<BASE64エンコードされたパスワード>

あとは、マイコンピュータを右クリックし、「ネットワークの場所を追加する」を押して追加していけばOKです。

記事の品質向上のため、感想をお聞かせください。

  • 分かりやすかった・ためになった (0)
  • 分かりにくかった・ためにならなかった (0)
  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。

コメントを残す

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)