質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Q&A

解決済

2回答

4809閲覧

Apache でリバースプロキシ (http:// から rtmp:// へ)

退会済みユーザー

退会済みユーザー

総合スコア0

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

0グッド

1クリップ

投稿2016/03/24 06:51

サーバ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 は

<IfModule mod_proxy.c> </IfModule> の中に


<Location /piyo>
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/
</Location>


を入れています.

これを


<Location /hoge>
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/
</Location>


に変更して 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 のポート) を入れてあります.

正常に動くために必要な方法がありましたら,お知らせいただければと思います.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

HTTPのRTMPは全く別のプロトコルです。そして、Apacheのmod_proxyはRTMPを知らないため、RTMP向けのリバースプロキシとして動作させる事ができません。

環境によっては、RTMPTを使えばできる可能性があります。RTMPTは「RTMPをHTTPで包んだプロトコル」です。どういうことかというと、外見はHTTPですので、通常のプロキシやリバースプロキシで処理できます。HTTPの中を取り出すと、RTMPで通信する内容が入っているので、RTMPTに対応したクライアント(ストリーミング再生するFlashとか)であれば、再生できます。

まずは、ServerBがRTMPTで配信できるようにして下さい(ffmpegでどうすればできるかはちょっとわかりませんが)。RTMPTのデフォルトポートは80番ですので、nginxと被る場合は、工夫が必要です。もしうまくいけば、普通のHTTPと同じように、リバースプロキシ設定(http://serverB:ポート番号/)をすれば、通信できると思います。Flashとかで作られたクライアントではRTMPで通信できないと自動的に80番のRTMPTでの通信を試行しますので、rtmp://...のままでもできるかともいますが、クライアントによってはrmtpt://...としないとうまくいかない可能性があります。

投稿2016/03/24 22:05

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

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 をサポートしていないのではないでしょうか。

投稿2016/03/24 16:10

TaichiYanagiya

総合スコア12146

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/03/28 04:24

皆さまご回答ありがとうございます. nginx で RTMPT は今のとこできないようで, とりあえず,ServerA のリダイレクトでしのぐことにしました (が別件でもしっくりきていません). 解決しましたら,どこかでお知らせできたらと思います.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問