内部サーバーにあるZoneMinderのインターフェイスを外部に転送

今回運用しているZoneMinderはファイアウォールの内側にある内部用のサーバーで稼働させています。

外部公開サーバーに載せなかった理由はいたって簡単で、ディスク容量と不安定な動作でサーバー障害の原因とならないようにするためです。

内部用サーバーは監視カメラの制御とバックアップ用のファイルサーバー、そして将来的には仮想化して実験用のサーバーやWindowsで稼働させているAPRS関連のサービスをサーバーで仮想化できればと目論んでおります。

今回はApacheの機能であるリバースプロキシを活用して内部サーバーで稼働しているZoneMinderをネット上から公開用のwebサーバーを通してアクセスしようという試みです。

で、ついでにhttps化も実現できればと言うオマケつき。

Apacheの設定

/etc/httpd/conf/httpd.conf

に下記を追加してリバースプロキシを実現します。

予め接続させたいドメインには”Proxy”でロケーションを用意してアクセス権などを好みの内容で設定しておきます。

ProxyPass /zm http://[サーバーネーム]/zm
ProxyPassReverse /zm http://[サーバーネーム]/zm
ProxyPass /cgi-bin-zm http://[サーバーネーム]/cgi-bin-zm
ProxyPassReverse /cgi-bin-zm http://[サーバーネーム]/cgi-bin-zm
ProxyPass /am/api http://[サーバーネーム]/zm/api
ProxyPassReverse /zm/api http://[サーバーネーム]/zm/api
ProxyPass /am/cache http://[サーバーネーム]/zm/chach
ProxyPassReverse /zm/cache http://[サーバーネーム]/zm/cache

<Proxy “/zm”>
require valid-user
AuthBasicProvider file
AuthDigestProvider file
order deny,allow
ProxyPreserveHost On
Require all granted
</Proxy>
<Proxy “/cgi-bin-zm”>
ProxyPreserveHost On
Options None
Require all granted
</Proxy>
<Proxy “/zm/api”>
ProxyPreserveHost On
Require all granted
</Proxy>
<Proxy “/zm/cache”>
ProxyPreserveHost On
Require all granted
</Proxy>

([サーバーネーム]はZMが実際に稼働しているサーバーの内部名称です。公開サーバーからアクセスできる実アドレスを記載します。)

ZoneMinderの設定の注意点

本来リバースプロキシ(Reverse Proxy)はApacheの機能なのでZonemInderには一切関係がありませんが、1つだけ悪影響を及ぼす注意点があります。

ZM内の映像と言いますか画像のストリームは組み込みとなっておりApacheのリバースプロキシはこのhtml内に掛かれている内部埋め込みURLまで書き換えるものではありません。

ZMの設定[Option]-[Servers]の中にZMサーバーを設定していると問題が生じます。

本来ここには必要のない限りサーバーを設定しないのがデフォルトとなっています。 コメントにもそのようにハッキリと謳われています。 サーバーが1台の場合は必要ありません。

勿論その1台しかいないサーバーを敢えて不必要にも設定した場合DMとしては問題なく機能しますがストリーミングの埋め込みURLにサーバーアドレスが追加記入され、これが原因となりリバースプロキシ経由ではアクセスできなくなります

これには注意が必要です。

(1 Feb 2020 加筆)

以下の記述はZoneMinderのAPIを利用するアプリを使用する場合はhashを選択しなければならないので該当しなくなりました。

その結果API経由を除いてはhttp経由のアクセスではリバースプロキシがうまく機能せずストリーミングのアドレスがLANのIPアドレスのままで動作しない状態です。

現時点では解決策が見つかっていません。

更に次の設定を確認します。

ZMの設定[Option]-[System]のAUTH_RELAYはnoneを選択します。

hashedを選択するとページ内のストリーミング埋め込みURL内に認証情報が埋め込まれReversePloxy使用中では認証エラーとなりリンクとして機能しなくなります。

サーバー設定の世界では必要性のない設定はあえてしないことが重要なんですね。 その時点で動作に問題や悪影響が無くてもどこで副次的に影響を及ぼすか分からないですからね。

スポンサーリンク


当ブログにお越し下さいましてありがとうございます。
ブログランキングに参加しております。
皆様の応援が励みになりますのでよろしければ応援クリックくお願い致します。
にほんブログ村 車ブログへ
にほんブログ村

シェアする

  • このエントリーをはてなブックマークに追加

フォローする