EDCB WebUIをnginxのreverse proxy越しに利用する



EPGDataCap_Bon (xtne6f氏版)+ EDCB_Material_WebUIを、nginxのリバースプロキシとBASIC認証、SSLという構成で外出先から使えるようにしてみます。

当然ですが、認証をかけずに公開してしまうと法律に抵触する可能性が高いので、BASIC認証の設定・検証などは慎重に行い、必ずSSL (TLS, https) で暗号化するようにしてください。

環境

nginx サーバー(VirtualBox仮想サーバー:ホストは下記録画サーバーでブリッジLAN接続)
IPアドレス
172.16.0.30
OS
Ubuntu Server 18.04.2 (64bit)
nginx
1.14.0 (Ubuntu)

録画サーバー(物理サーバー)
IPアドレス
172.16.0.10
OS
Windows 10 Pro 1903 (64bit)
EpgDataCap_Bon (xtne6f氏版)
EDCB_Material_WebUI

予め、LAN内から問題なく利用できるようにしてある前提です。

SSL (TLS, https) の設定

前回の記事の通り設定し、アドレスと証明書を取得しておきます。

  • DDNSのアドレスでSSL証明書をLet’s Encryptから取得する

BASIC認証の設定

認証に使うID・パスワードファイルを作成します。nginx標準ではできないので、Apacheのツールを流用します。

sudo apt update
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/.htpasswd FIRST-USER-NAME
~パスワードを入力~
sudo htpasswd /etc/nginx/.htpasswd SECOND-USER-NAME
~パスワードを入力~

これで、/etc/nginx/.htpasswd にファイルが作成されたはずです。catコマンドなどで確認しましょう。パスワードはハッシュ化されているため、入力したものとは異なる文字列が記録されているはずです。

BASIC認証は http、server、location すべての階層で使用できますが、今回はreverse proxyのロケーションのみを対象に設定してみます。

server {

  # 省略
  
  location /edcb/ {
    auth_basic "closed site";
    auth_basic_user_file /etc/nginx/.htpasswd;

    # 後述

  }
}

auth_basic、auth_basic_user_fileの2つを設定するだけと簡単です。

reverse proxyの設定

先程作成した /edcb/ を、Material WebUIにリバースプロキシで転送(?)する設定です。

server {

  # 省略
  
  location /edcb/ {
    auth_basic "closed site";
    auth_basic_user_file /etc/nginx/.htpasswd;

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://172.16.0.10:5510/;
  }
}

proxy_passは、お使いの環境に合わせてIPアドレスとポートを設定してください。EDCBとnginxが同じサーバーで動いている場合は、localhost:5510127.0.0.1:5510 も使えるんじゃないかと思います。

ポートフォワード(ポート開放)設定

お使いのルーターの管理画面に入り、TCP 443ポートを nginx サーバーのIPアドレスに転送する設定をして外部に公開します。


まとめ

完成した設定ファイルはこんな感じです。

/etc/nginx/conf.d/server.conf

server {
  # SSLをon
  ssl on;
  listen 443;
  server_name my-home-server.ddns.net;
  root /var/www/html;

  # SSL設定
  ssl_certificate     /etc/letsencrypt/live/my-home-server.ddns.net/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/my-home-server.ddns.net/privkey.pem;
  
  # 他ロケーションの設定など
  location /owncloud/ {
    # 省略
  }

  # 今回の設定
  location /edcb/ {
    auth_basic "closed site";
    auth_basic_user_file /etc/nginx/.htpasswd;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://172.16.0.10:5510/;
  }
}


言うまでもないですがBASIC認証は暗号化されておらず危険なので、必ずSSLで暗号化し、HTTP (listen 80) は無効化しましょう。






以上、SSL、BASIC認証、Reverse Proxyの設定でした。私の環境では上記の設定で問題なく利用できており、外出先からPCやスマホで予約・リモート視聴が可能になりました。

非常に便利なのでぜひ試してみてください。

コメント