質問: サーバA と サーバB があります. サーバB は nginx と ffmpeg で rtmp によるストリーミングが行われています. すなわち, rtmp://serverB/hoge/media.mp4 に VLCメディアプレイヤーなどでアクセスし,再生可能な状況にあります. サーバA は apache が入っており, http://serverA/media.mp4 にアクセスした際に,リバースプロキシにより,サーバB のファイルが再生されるようにしたいと思っております. この際,http → http は問題なく動作しますが,http → rtmp にするとうまく動作しません. http → http で動作する際,サーバA の /etc/httpd/conf/httpd.conf は の中に --- Order deny,allow Deny from all Allow from 秘密 Allow from 秘密 SetEnv force-proxy-request-1.0 1 SetEnv proxy-nokeepalive 1 ProxyPass http://serverB/ ProxyPassReverse http://ServerB/ --- を入れています. これを --- Order deny,allow Deny from all Allow from 秘密 Allow from 秘密 SetEnv force-proxy-request-1.0 1 SetEnv proxy-nokeepalive 1 ProxyPass rtmp://serverB/ ProxyPassReverse rtmp://ServerB/ --- に変更して http → rtmp のテストをしたところ,ブラウザ上で 500 番のエラーとなります. サーバA の /etc/httpd/logs/error_log には [Thu Mar 24 15:44:59 2016] [warn] proxy: No protocol handler was valid for the URL hoge/media.mp4. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule. が追加されます. また,サーバA の iptables には iptables -A INPUT -p tcp --dport 1935 -j ACCEPT (サーバB の rtmp のポート) を入れてあります. 正常に動くために必要な方法がありましたら,お知らせいただければと思います.
回答: error_log にあるように、Apache httpd のプロキシモジュールがバックエンドのプロトコルとして RTMP をサポートしていないのでしょう。 ``` (1) Client --[HTTP(RTMPT)]--> サーバA:httpd --[HTTP(RTMPT)] --> サーバB:nginx (2) Client --[HTTP(RTMPT)]--> サーバA:httpd -----[RTMP]-------> サーバB:nginx (3) Client -----[RTMP]------> サーバA:httpd -----[RTMP]-------> サーバB:nginx ``` (1)は HTTP をそのままスルーしてうまくいくのだと思います。 (2)は HTTP←→RTMP を行なうようなモジュールが必要ですが、現時点では提供されていないようです。 サポートしているプロトコルはmod_proxy のマニュアルを参照ください。 バックエンドで RTMPT を提供しているのであれば、わざわざ Apache 側で作らなくても、という気も します。 (3)は、現時点ではフロント側も RTMP をサポートしていないのではないでしょうか。