Documentation/Tutorials/WAR

Tomcat への Red5 のデプロイ

0.8.0 向けに更新済み

はじめに

ここでは、Red5 を Web アプリケーションアーカイブ (WAR) として Tomcat にデプロイする方法について説明します。標準の Red5 デプロイメントは、システムサービスとして実行される埋め込み JEE コンテナ (Jetty または Tomcat) の付属するスタンドアロン Java アプリケーションですが、WAR バージョンは JEE コンテナ内で実行されます。

開発チームは Tomcat を推奨しますが、WAR はほかの JEE コンテナで使うことができます。

デプロイメント

Tomcat war デプロイヤは定期的に webapps ディレクトリを走査して war がないかどうか調べます。まだデプロイされていない war が見つかると、デプロイヤは war ファイルを war のファイル名をベースとするディレクトリに展開します。たとえば、myapp.war という名前の war は myapp という名前のディレクトリに展開されます。実際のインストール先によって異なるかもしれませんが、フルパスは C:\Tomcat-6.0.18\webapps\myapp などのようになります。

Red5 Server は ROOT.war という名前のファイルにパッケージ化されます。このファイル名は、ほとんどの JEE アプリケーションサーバーでは特別な意味を持っており、一般にデフォルトまたはルート web コンテキストです。ルート web コンテキストは、パスコンポーネントを含まないリクエストを処理する役割を果たします。パスコンポーネントのある URL は、たとえば  http://www.example.com/myapp のような URL で、ルート Web アプリケーションの URL は  http://www.example.com/ のようになります。追加の構成ファイルであるコンテキストディスクリプタが、各 Web コンテキストの META-INF ディレクトリにあります。HTTP 経由でアクセスされることのないアプリケーションでは、Web/サーブレットコンテキストは必要ありません。ルート war ファイルには、スタンドアロンサーバーに存在するほぼすべてのものが含まれますが、埋め込みサーバークラスと一部の構成ファイルは含まれません。

ROOT.war の名前を red5.war に変更することはできますが、この変更はテストされておらず、一部の構成ファイルの修正が必要になります。なお、この名前と JEE コンテナ内でのその解決は、主に HTTP リクエストを対象とするもので、RTMP での通信には影響がないことに注意してください。

Context ディスクリプタ

Context XML ディスクリプタは、有効な Context 要素を含む XML データの断片で、通常はメインの Tomcat サーバー構成ファイル (conf/server.xml) にあります。あるホストがあった場合、その Context ディスクリプタは $CATALINA_HOME/conf/[enginename]/[hostname]/ に置かれます。ファイル名は webapp 名と結び付けられているわけではありませんが、war に含まれる context.xml ファイルからデプロイヤがディスクリプタを作成するときに、Web アプリケーション名と同じ名前が付けられます。

Context ディスクリプタでは、リソースの命名やセッションマネージャの構成など、コンテキストのすべての側面と構成パラメータを定義できます。Context 要素で指定される docBase では、.WAR それ自体、および .WAR の展開時に作成されるディレクトリのどちらも参照可能であることに注意してください。

Red5 の構成

Red5 Server の構成は、Red5 の機能を使用する各アプリケーションの web.xml、デフォルトコンテキストファイル、bean ref ファイル、および Spring web コンテキストファイル内のいくつかのコンテキストパラメータから成り立っています。AMF だけを使って Red5 と通信する Web アプリケーションでは、サーバーのアプリケーションコンテキストの構成エントリは必要ありません。Spring を介して管理されるアプリケーションコンテキストを利用できるのは、Web アプリケーションのクラスローダの動作のしくみから、ルート war 内に含まれるアプリケーションだけです。また、Red5 では、スコープと呼ばれるコンテキストと対になる要素を使用します。スコープは、コンテキスト、ハンドラ、サーバーコアインスタンス、およびその他の少数のオブジェクトのコンテナとして機能します。スコープは、FMS のアプリケーションモデルと似ています。

Red5 の初期エントリポイント、すなわちスタートアップサーブレットは WarLoaderServlet で、下に示すように web.xml でサーブレットリスナーとして構成されています。機能的には、このサーブレットは標準の Red5 Server の Bootstrap クラスに相当します。

<listener>
        <listener-class>org.red5.server.war.WarLoaderServlet</listener-class>
</listener>

このリスナーは、コンテキスト初期化およびコンテキスト破棄のコンテナイベントの受信時に、Red5 の起動と停止を行う役割を果たします。この war ローダは機能的には Spring の ContextLoaderListener サーブレットと似ていますが、Red5 に特化しています。

Spring コンテキスト

Red5 によって使用されるコンテキストには、"デフォルト" と "web" の 2 つの種類があります。存在することのできるデフォルトコンテキストは 1 つだけですが、web コンテキストは任意の数だけ存在することができます。

デフォルトコンテキスト

デフォルトコンテキストはグローバルなアプリケーションコンテキストと同義で、トップレベルすなわちグローバルレベルでオブジェクトとリソースを提供する役割を果たします。このレベルの Spring bean は、ROOT クラスディレクトリ (C:\Tomcat-6.0.14\webapps\ROOT\WEB-INF\classes など) にある defaultContext.xml と beanRefContext.xml によって構成されます。bean ref ファイルは、org.springframework.context.support.ClassPathXmlApplicationContext のインスタンスである default.context bean を定義します。これら以外の 2 つの構成ファイル red5-common.xml と red5-core.xml は、デフォルトコンテキストを構築するのに使われます。これらのファイルは同名のスタンドアロンの構成ファイルから派生していますが、主な違いはサーバー埋め込みに関するセクションが削除されている点にあります。

デフォルトコンテキストは、web.xml で parentContextKey パラメータで参照されています。

<context-param>
        <param-name>parentContextKey</param-name>
        <param-value>default.context</param-value>
</context-param>

このパラメータは、ContextLoader が親コンテキストを探すときに使われ、親コンテキストがわかると、グローバルリソースを特定することができます。コンテキストローダは、WarLoaderServlet が web コンテキストを初期化するときに使われます。

グローバルコンテキストと対になるスコープはグローバルスコープで、グローバルスコープは web.xml で globalScope パラメータで参照されています。

<context-param>
        <param-name>globalScope</param-name>
        <param-value>default</param-value>
</context-param>

web コンテキスト

web コンテキストの定義は、最後に -web.xml が付く Spring 構成ファイルで指定します。たとえば、アプリケーションの名前が oflaDemo だとすると、構成ファイルの名前は oflaDemo-web.xml になります。Spring web コンテキストファイルと JEE コンテキストディスクリプタとを混同しないようにしてください。Spring web コンテキストファイルは red5 web コンテキストでのみ使われるのに対し、JEE コンテキストディスクリプタは Tomcat によって使われます。各 web コンテキストは、対応する構成ファイルを持たなければなりません。構成ファイルは、次のように web.xml の中で ant スタイルのパラメータで指定します。

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>WEB-INF/classes/*-web.xml</param-value>
</context-param>

コンテキスト構成ファイルでは、参加/退出するクライアントについてアプリケーションに通知を行うのに使われるリソースを指定し、クライアントが呼び出すことのできるメソッドを提供します。また、コンテキスト構成ファイルでは、これらのクラスの階層構造を指定します。各コンテキスト構成ファイルには、最低限、コンテキスト、スコープ、およびハンドラの 3 つのエントリが含まれていなければなりません。この規則の唯一の例外はルート web アプリケーションです。これは、ルート web アプリケーションにはハンドラアプリケーションがないためで、この場合、グローバルハンドラが使われます。

Context - 各コンテキストには一意の名前を割り当てなければなりません。これは、すべてのコンテキストが単一の Spring アプリケーションコンテキスト内に存在するからです。ルート web コンテキストの名前は web.context で、追加のコンテキストではこのベース名のあとにそれぞれの Web アプリケーション名を付けます。たとえば、oflaDemo の場合、コンテキストの名前は web.context.oflaDemo のようになります。コンテキストは、web コンテキストファイルの中で次のように指定します。

<bean id="web.context" class="org.red5.server.Context">
        <property name="scopeResolver" ref="red5.scopeResolver" />
        <property name="clientRegistry" ref="global.clientRegistry" />
        <property name="serviceInvoker" ref="global.serviceInvoker" />
        <property name="mappingStrategy" ref="global.mappingStrategy" />
</bean>

スコープ - アプリケーションでは、ハンドラをコンテキストとサーバーにリンクするスコープが少なくとも 1 つ必要です。これらのスコープを使ってツリーを構築することができ、クライアントは各ノードに接続して、スコープ内のオブジェクト (共有オブジェクトやライブストリーム) を共有することができます。スコープはルームまたはインスタンスとみなすことができます。

ルートスコープは web.scope という名前を持っており、追加のスコープの名前は、コンテキストの名前付け規約に従っている必要があります。たとえば、oflaDemo のスコープの名前は web.scope.oflaDemo となり、ほかのコンテキストと衝突しないようになります。

スコープには、以下のプロパティがあります。 1.server - サーバー red5.server を参照します 。 2.parent - このスコープの親は通常は global.scope です。 3.context - このスコープのコンテキストで、ルートでは web.context を、oflaDemo では web.context.oflaDemo を使用します。 4.handler - このスコープのハンドラ。FMS の main.asc に相当します。5.contextPath - このスコープに接続するときに使うパス。6.virtualHosts - このスコープがリスンするホスト名または IP アドレスをカンマで区切って指定したリスト。war バージョンではホスト名は管理しません。この役割は Tomcat が担当します。“*” という値は、“あらゆるもの”が期待されていることを意味します。

次に示すのは、ルートスコープの定義例です。

<bean id="web.scope" class="org.red5.server.WebScope" init-method="register">
        <property name="server" ref="red5.server" />
        <property name="parent" ref="global.scope" />
        <property name="context" ref="web.context" />
        <property name="handler" ref="global.handler" />
        <property name="contextPath" value="/" />
        <property name="virtualHosts" value="*" />
</bean>

contextPath は、各 Web アプリケーションの JEE コンテキストファイル内の docBase に似ています。docBase は HTTP がリソースを探すときに使われますが、contextPath は RTMP 経由でリソースを探すときに使われます。アプリケーションでは、構成済みのパスの後に要素を追加して、追加のスコープを動的に作成することができます。動的に作成されたスコープはすべて、同一のハンドラを使用しますが、それぞれ独自のプロパティ、共有オブジェクト、およびライブストリームを持ちます。

ハンドラ - 各コンテキストでは、接続クライアントから呼び出されるメソッドを提供するハンドラが必要です。すべてのハンドラは org.red5.server.api.IScopeHandler を実装する必要がありますが、共有オブジェクトやストリームへのアクセスを制御するために追加のインタフェースを実装することもできます。基本クラスとして使用できる実装例は、org.red5.server.adapter.ApplicationAdapter にあります。このクラスの詳細については、Javadoc を参照してください。

次に示すのは、oflaDemo のスコープハンドラの例です。

<bean id="web.handler.oflaDemo" class="org.red5.demos.oflaDemo.Application"/>

id 属性は、oflaDemo のスコープ定義で参照されています。

<bean id="web.scope.oflaDemo" class="org.red5.server.WebScope" init-method="register">
        <property name="server" ref="red5.server" />
        <property name="parent" ref="global.scope" />
        <property name="context" ref="web.context.oflaDemo" />
        <property name="handler" ref="web.handler.oflaDemo" />
        <property name="contextPath" value="/oflaDemo" />
        <property name="virtualHosts" value="*" />
</bean>

特別なサーバーサイドロジックが必要ない場合は、Red5 が提供しているデフォルトアプリケーションハンドラを使用できます。

<bean id="web.handler" class="org.red5.server.adapter.ApplicationAdapter" />

外部アプリケーション 外部アプリケーションとは、ROOT Web アプリケーションの外部で Red5 にアクセスする Web アプリケーションのことです。これらのアプリケーションは、同一の JVM 内に存在するかどうかを問わず、RTMP または AMF トンネルサーブレットを介してのみ Red5 にアクセスすることができます。トンネルサーブレットは、Red5 との AMF 通信が必要な各アプリケーションに対し、web.xml で構成します。次にその例を示します。

        <context-param>
                <param-name>tunnel.acceptor.url</param-name>
                <param-value>http://localhost:8080/gateway</param-value>
        </context-param>

        <context-param>
                <param-name>tunnel.timeout</param-name>
                <param-value>30000</param-value>
        </context-param>

        <servlet>
                <servlet-name>gateway</servlet-name>
                <servlet-class>org.red5.server.net.servlet.AMFTunnelServlet</servlet-class>
        </servlet>
    
        <servlet-mapping>
                <servlet-name>gateway</servlet-name>
                <url-pattern>/gateway</url-pattern>
        </servlet-mapping>

トンネルサーブレットクラスは、それが実行されるアプリケーションのクラスパス上に存在しなければなりません。トンネルサーブレットに加え、org.red5.server.net.servlet.ServletUtils クラスと次のライブラリ jar が必要です。

commons-codec-1.3.jar
commons-httpclient-3.0.1.jar
mina-core-2.0.0-M6.jar
slf4j-api-1.5.6.jar
jcl-over-slf4j-1.5.6.jar
jul-to-slf4j-1.5.6.jar
log4j-over-slf4j-1.5.6.jar
logback-core-0.9.14.jar
logback-classic-0.9.14.jar
red5-remoting-0.8.0.jar (ServletUtils クラスを含む)

これらの jar は、アプリケーションの WEB-INF/lib ディレクトリに置く必要があります。ディレクトリの例を次に示します。C:\Tomcat-6.0.18\webapps\myapp\WEB-INF\lib

アプリケーションの作成とデプロイ

以下では、2 つのアプリケーションを取り上げます。ひとつは、AMF または RTMP を介して Red5 と通信し、独自のハンドラを持つ "RemoteApp" という名前の Web アプリケーションです。もうひとつは、RTMP を介して Red5 と通信する SWF で、アプリケーションの名前は "LocalApp" です。これらのアプリケーションは、Java をサポートしている任意の IDE を使って作成できます。ここでは Eclipse IDE を推奨します。このサンプルで取り上げている SWF ファイルは、Flex で AS3 を使って作成しました。

リモートアプリケーション

このサンプルでは、リモート Red5 アプリケーションで必要な最小限の構成を提供します。次のリソースが作成されます。 * JEE Web アプリケーション * クライアント SWF * Red5 ハンドラクラス * Spring web コンテキスト

手順 1. IDE で RemoteApp という名前で Web アプリケーションを作成します。2. red5.jar を入手します。red5.jar は  http://red5.googlecode.com/svn/repository/red5/red5-0.8.0.jar からダウンロードできます。コマンド「ant jar」を実行してソースから red5.jar をビルドすることもできます。このライブラリは、スコープハンドラの ApplicationAdapter を拡張する場合に必要です。3. リモーティング jar を入手します。コマンドラインで「ant remotejar」と入力してビルドするか、または  http://red5.googlecode.com/svn/repository/red5/red5-remoting-0.8.0.jar からダウンロードします。このライブラリは、AMF トンネルサーブレットを提供します。4. ライブラリ jar をプロジェクトのライブラリディレクトリに置き、ビルドクラスパスに追加します。5. Java および Flex のソースをコンパイルします。6. Tomcat の webapps ディレクトリに RemoteApp という名前のディレクトリを作成します。ディレクトリの例を次に示します。C:\Tomcat-6.0.18\webapps\RemoteApp 7. web ディレクトリの内容を RemoteApp ディレクトリにコピーします。8. bin ディレクトリから RemoteApp.swf を webapps\RemoteApp ディレクトリにコピーします。9. red5.jar ファイルを除いて、lib ディレクトリとその内容を WEB-INF にコピーします。10. サンプルのディレクトリ全体と RemoteApp-web.xml ファイルを bin ディレクトリから ROOT 以下の classes ディレクトリにコピーします。ディレクトリの例を次に示します。C:\Tomcat-6.0.18\webapps\ROOT\WEB-INF\classes 11. Tomcat を再起動します。 12. ブラウザで  http://localhost:8080/RemoteApp/RemoteApp.html にアクセスします。 13.[Connect RTMP] ボタンまたは [Connect HTTP] ボタンをクリックします。テストが成功すれば、サーバーからのレスポンス "Hello World" が表示されるはずです。

ローカルアプリケーション

ROOT Web アプリケーション内部にすべてが存在するシンプルなアプリケーションです。このサンプルは、Spring web コンテキスト、ハンドラクラス、およびクライアント SWF から構成されます。

手順 1. IDE で LocalApp という名前で Web アプリケーションを作成します。2. red5.jar を入手します。red5.jar は  http://red5.googlecode.com/svn/repository/red5/red5-0.8.0.jar からダウンロードできます。コマンド「ant jar」を実行してソースから red5.jar をビルドすることもできます。このライブラリは、スコープハンドラの ApplicationAdapter を拡張する場合に必要です。3. ライブラリ jar をプロジェクトのライブラリディレクトリに置き、ビルドクラスパスに追加します。4. Java および Flex のソースをコンパイルします。5. LocalApp.html と LocalApp.swf を bin ディレクトリから ROOT ディレクトリにコピーします。ディレクトリの例を次に示します。C:\Tomcat-6.0.18\webapps\ROOT 6. サンプルのディレクトリ全体と LocalApp-web.xml ファイルを bin ディレクトリから ROOT 以下の classes ディレクトリにコピーします。ディレクトリの例を次に示します。C:\Tomcat-6.0.18\webapps\ROOT\WEB-INF\classes 7. Tomcat を再起動します。 8. ブラウザで  http://localhost:8080/LocalApp.html にアクセスします。 9. [Connect] ボタンをくします。テストが成功すれば、サーバーからのレスポンス "Hello World" が表示されるはずです。

サンプルのソース

サンプルアプリケーションのソースは、 http://red5.googlecode.com/svn/java/example/trunk から Subversion で入手できます。

追加の web 構成

AMF ゲートウェイ - このサーブレットは、AMF を使ったサーバーアプリケーションとの通信を提供します。

<servlet>
        <servlet-name>gateway</servlet-name>
        <servlet-class>org.red5.server.net.servlet.AMFGatewayServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
        <servlet-name>gateway</servlet-name>
        <url-pattern>/gateway</url-pattern>
</servlet-mapping>

RTMPT - このサーブレットは、HTTP を介した RTMP トンネルを実装しており、通常はファイアウォール関連の問題を回避するために使われます。

<servlet>
        <servlet-name>rtmpt</servlet-name>
        <servlet-class>org.red5.server.net.rtmpt.RTMPTServlet</servlet-class>
        <load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
        <servlet-name>rtmpt</servlet-name>
        <url-pattern>/fcs/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
        <servlet-name>rtmpt</servlet-name>
        <url-pattern>/open/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
        <servlet-name>rtmpt</servlet-name>
        <url-pattern>/idle/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
        <servlet-name>rtmpt</servlet-name>
        <url-pattern>/send/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
        <servlet-name>rtmpt</servlet-name>
        <url-pattern>/close/*</url-pattern>
</servlet-mapping>

セキュリティ - 次のエントリは、機密情報の取得を防ぐのに使われます。

<security-constraint>
        <web-resource-collection>
                <web-resource-name>Forbidden</web-resource-name>
                <url-pattern>/WEB-INF/*</url-pattern>
        </web-resource-collection>
        <auth-constraint />
</security-constraint>

<security-constraint>
        <web-resource-collection>
                <web-resource-name>Forbidden</web-resource-name>
                <url-pattern>/persistence/*</url-pattern>
        </web-resource-collection>
        <auth-constraint />
</security-constraint>

<security-constraint>
        <web-resource-collection>
                <web-resource-name>Forbidden</web-resource-name>
                <url-pattern>/streams/*</url-pattern>
        </web-resource-collection>
        <auth-constraint />
</security-constraint>

ROOT war の Red5 への名前変更

状況によっては、使用しているコンテナの ROOT Web アプリケーションが上書きされないよう、war の名前の変更が必要になることがあります。そのためには、いくつか手順を踏む必要があります。

1. red5 の web.xml を開きます。

tomcat/webapps/red5/WEB-INF/web.xml

2. webAppRootKey パラメータを /red5 に変更します。

        <context-param>
                <param-name>webAppRootKey</param-name>
                <param-value>/red5</param-value>
        </context-param>

3. root-web.xml ファイルを開きます。

tomcat/webapps/red5/WEB-INF/classes/root-web.xml

4. web.scope bean の contextPath と virtualHosts を次のように変更します。

        <property name="contextPath" value="/red5" />
        <property name="virtualHosts" value="*" />

トラブルシューティング

デプロイで問題が生じたり、アプリケーションが起動しなかったりした場合は、バグとして報告する前に以下の手順を試してください。ディレクトリの例には、Windows での標準的なパス構成を使用しています。

1. Tomcat サーバーを停止します。

2. Tomcat のインストール先ディレクトリを探します。

C:\Program Files\Apache\Tomcat

3. "work" ディレクトリを削除します。

C:\Program Files\Apache\Tomcat\work

4. "conf" ディレクトリから "Catalina" ディレクトリを削除します。

C:\Program Files\Apache\Tomcat\conf\Catalina

5. 展開済みの war ディレクトリが存在する場合は削除します。

C:\Program Files\Apache\Tomcat\webapps\ROOT C:\Program Files\Apache\Tomcat\webapps\echo C:\Program Files\Apache\Tomcat\webapps\SOSample

6. WAR ファイルが webapps ディレクトリに存在していることを確認します。

C:\Program Files\Apache\Tomcat\webapps\ROOT.war C:\Program Files\Apache\Tomcat\webapps\echo.war C:\Program Files\Apache\Tomcat\webapps\SOSample.war

7. Tomcat を再起動します。

上記の操作を行っても問題が解決しない場合は、次の情報を収集し、同じ問題に遭遇したユーザーがほかにいないことを確認してから Trac に課題として登録してください。

1. Java のバージョン 2. Tomcat のバージョン 3. オペレーティングシステム 4. Red5 のバージョン (0.8、Trunk、Revision 2283、など...)

定義

AMF – Simple Object Access Protocol (SOAP) をベースとして柔軟に作成されたバイナリ形式。主に、リモートプロシージャコールを使って Adobe Flash アプリケーションとデータベースとの間でデータを交換するために使われます。各 AMF メッセージに含まれるボディはエラーまたはレスポンスを保持しており、ActionScript Object として表現されます。

Ant – ソフトウェアのビルドプロセスを自動化するためのソフトウェアツール。make に似ていますが、Java 言語で記述されていて、Java プラットフォームを必要とし、Java プロジェクトをビルドするのに最も適しています。

AS3 – ECMAScript をベースとするスクリプト言語で、主に Adobe Flash Player プラットフォームを使った Web サイトとソフトウェアの開発に使われます。

Flex – Macromedia が同社の Macromedia Flash ベースのクロスプラットフォームなリッチインターネットアプリケーションをサポートすることを目的に 2004 年 3 月にリリースした一連のテクノロジのためのソフトウェア開発キットおよび IDE。

RTMP – Real Time Messaging Protocol (RTMP) は、Adobe Systems が開発したプロプライエタリなプロトコルです。インターネットを介して Adobe Flash Player クライアントに音声、動画、データをストリーム配信する Adobe Flash Media Server で主に使われます。RTMP はリモートプロシージャコールの代わりに使用することができます。RTMP はエンドポイントと永続的な接続を保持し、リアルタイム通信を可能にします。その他の RPC サービスは、単一のクライアント/サーバー間リクエスト/レスポンスモデルを使って非同期的に行われるので、リアルタイム通信は不要です。

RTMPT – HTTP トンネリングを使用する RTMP。

SWF – Adobe の Flash ソフトウェアによって作成されたプロプライエタリなベクトルグラフィックスファイル形式。SWF ファイルは、Web 上でのパブリケーション用にサイズが小さくなるよう考慮されており、さまざまなレベルの対話性や機能を備えたアニメーションまたはアプレットを同梱することができます。SWF は、アニメーション画像や DVD 動画のメニュー、テレビコマーシャルなどで使われることもあります。

Tomcat – Apache Software Foundation (ASF) で開発されたウェブコンテナ、すなわちアプリケーションサーバーです。Tomcat は Sun Microsystems のサーブレットおよび JavaServer Pages (JSP) 仕様を実装しており、Java コードを Web サーバーと連携させて実行するための環境を提供します。Tomcat には構成と管理のためのツールがありますが、構成ファイルを編集して構成することもできます。構成ファイルは一般に XML 形式になっています。Tomcat には、独自の内部 HTTP サーバーが含まれています。