Revers Proxy for Canon製ネットワークカメラ

グローバルIPアドレスが1個しか割り当てられず、80番以外の特殊ポートで動作しているCanon製ネットワークカメラを、ApacheのRevers Proxyを使って、Apacheのサブディレクトリ配下にあるように見せる方法を検証しました。
<IfModule mod_proxy.c>
# 1台目のネットワークカメラのリバースプロキシ設定(1つ目が行き、2つ目が戻り)
ProxyPass /live/cam1/ http://<!-- ネットワークカメラのホスト名 -->:10081/
ProxyPassReverse /live/cam1/ http://<!-- ネットワークカメラのホスト名 -->:10081/
# 2台目のネットワークカメラのリバースプロキシ設定(1つ目が行き、2つ目が戻り)
ProxyPass /live/cam2/ http://<!-- ネットワークカメラのホスト名 -->:10082/
ProxyPassReverse /live/cam3/ http://<!-- ネットワークカメラのホスト名 -->:10083/
# 3台目のネットワークカメラのリバースプロキシ設定(1つ目が行き、2つ目が戻り)
ProxyPass /live/cam3/ http://<!-- ネットワークカメラのホスト名 -->:10083/
ProxyPassReverse /live/cam2/ http://<!-- ネットワークカメラのホスト名 -->:10082/
</IfModule>
<IfModule mod_rewrite.c>
# URL書き換えを有効にする
RewriteEngine On
# REFERERをチェックして、1台目のネットワークカメラからのコンテンツURLを書き換える
RewriteCond %{HTTP_REFERER} ^http://<!-- Webサーバのホスト名 -->/live/cam1/ [NC]
RewriteRule ^/(viewer|-wvhttp-01-)/(.*)$ /live/cam1/$1/$2 [R,L]
# REFERERをチェックして、2台目のネットワークカメラからのコンテンツURLを書き換える
RewriteCond %{HTTP_REFERER} ^http://<!-- Webサーバのホスト名 -->/live/cam2/ [NC]
RewriteRule ^/(viewer|-wvhttp-01-)/(.*)$ /live/cam2/$1/$2 [R,L]
# REFERERをチェックして、3台目のネットワークカメラからのコンテンツURLを書き換える
RewriteCond %{HTTP_REFERER} ^http://<!-- Webサーバのホスト名 -->/live/cam3/ [NC]
RewriteRule ^/(viewer|-wvhttp-01-)/(.*)$ /live/cam3/$1/$2 [R,L]
</IfModule>
サブディレクトリへのアクセスをネットワークカメラのアドレスに転送することは造作もないことでした。一番難儀したのは、ネットワークカメラから帰ってくるHTMLコンテンツの内容でした。
/viewer/live/ja/~
とか
/-wvhttp-01-/~
というURLのパスが指定されているので、そのまま表示しようとすると"404 not found"エラーにしかなりません。無条件に"/viewer/live/ja/~"や"/-wvhttp-01-/~"を書き換えると、関係のないページのコンテンツまで書き換わってしまう可能性があるため、書き換えは「Refererがネットワークカメラであること」という条件を付け、条件に一致するものについてはパスの先頭にURLを付け足す必要がありました。また、ネットワークカメラは複数台あるので、Refererのアドレスでどのネットワークカメラであるか?を判別して、振り分けしています。
ただ、これもブラウザ側やセキュリティソフトの設定でRefererを返さないようになっていると意図した動きにはならないので、完璧ではないんですよねぇ。