🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Apache

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

VPS

VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

Q&A

解決済

2回答

2810閲覧

さくらのVPSでApacheとTomcatを連携したい

kumaGoro_95

総合スコア1

Apache

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

VPS

VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

1グッド

1クリップ

投稿2020/09/07 11:15

編集2020/09/09 14:15

前提

自分で作成したJavaアプリをWeb上にアップしたいと思い、VPSサーバーをレンタルしApache,JDK,Tomcatをインストールしました。80番ポートでApacheのtestページ、8080番ポートでTomcatのtestページを表示させるところまでは問題なくできたのですが、ApacheとTomcatを連携させることができず困っています。

設定

  • VPS

・さくらのVPS
・OS:CentOS Linux release 7.8.2003

  • JDK

・バージョン:1.8.0_262
・インストール方法:yum

  • Apache

・バージョン:Apache2.4.6
・インストール方法:yum

  • Tomcat

・バージョン:apache-tomcat9.0.37
・インストール方法:wgetで最新版をインストール

実現したいこと

ApacheとTomcatをajpで連携したい。「http://IPアドレス/examples」で、tomcatのページが表示されるようにしたい。

発生している問題・エラーメッセージ

http://IPアドレス/examples でアクセスすると、503エラーの画面が表示される。

Service Unavailable The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.

Apacheのエラーログについては以下の通りです。

[Mon Sep 07 20:02:49.425625 2020] [proxy:error] [pid 2152] (111)Connection refused: AH00957: AJP: attempt to connect to 160.16.151.224:8009 (160.16.151.224) failed [Mon Sep 07 20:02:49.425783 2020] [proxy:error] [pid 2152] AH00959: ap_proxy_connect_backend disabling worker for (160.16.151.224) for 60s [Mon Sep 07 20:02:49.425805 2020] [proxy_ajp:error] [pid 2152] [client 自分のグローバルIP:64334] AH00896: failed to make connection to backend: 160.16.151.224

今まで試したこと

  • Tomcat
  1. /opt/apache-tomcat/conf/server.xmlの8080番ポートの記述をコメントアウトし、8009番ポートのコメントアウトを削除する
  2. 同ファイルの8009番ポートの記述内容を以下の通り変更する(adress,secureRequired)
<!-- <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> --> ~中略~ <Connector protocol="AJP/1.3" address="0.0.0.0" port="8009" secureRequired="false" redirectPort="8443" />
  • Apache

/etc/httpd/conf.dディレクトリにhttpd-proxy.confファイルを作成

ProxyPass / ajp://IPアドレス:8009/examples/

コメント

今までQiitaの記事や動画等参考にしてがんばってみましたが、Linux、サーバーの知識が不足しており、何が原因なのか判断できません。
設定を変更するたびにsystemctl restartしてはいますが、うまくいく気配が全くありません。
初心者のため質問に至らない点もあると思いますが、原因・解決策等ご教示いただければ幸いです。

A-pZ👍を押しています

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/09/07 11:43

Apache httpdをプロキシーとして使ってTomcatに渡そうとしている、のかな?
guest

回答2

0

Apacheのmod_ajpモジュールを利用する場合は、以下のconfのコメントアウトを解除したのち、Tomcatのajp設定を有効にして、ProxyPassを設定すれば動作します。

conf

1#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

なお、tomcatの設定変更をせずにApache側だけで設定を完結させる方法として、リバースプロクシを設定して行うと、tomcat単体で再起動ができ、より簡単に構築・運用ができます。(mod_ajpはApacheとTomcatの両方を再起動しないと連携できなくなるケースがあります)

投稿2020/09/07 23:29

A-pZ

総合スコア12011

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

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

kumaGoro_95

2020/09/09 14:15

ご回答ありがとうございます。 「/etc/httpd/conf.modules.d/00-proxy.conf」にて、 > LoadModule proxy_ajp_module modules/mod_proxy_ajp.so が設定されているのを確認しました。(既にコメントアウトされていました) 現在、ProxyPassについては「/etc/httpd/conf.d/httpd-proxy.conf」で > ProxyPass / ajp://127.0.0.1:8009/examples/ と設定しています。 なお、「/etc/httpd/conf/httpd.conf」内で > Include conf.d/*.conf の設定があるのを確認しております。 この設定でエラーログが以下の様に表示されています。 ----- [Wed Sep 09 23:12:14.698850 2020] [proxy_ajp:error] [pid 3137] (70007)The timeout specified has expired: AH01030: ajp_ilink_receive() can't receive header [Wed Sep 09 23:12:14.699240 2020] [proxy_ajp:error] [pid 3137] [client 126.47.91.136:49976] AH00992: ajp_read_header: ajp_ilink_receive failed [Wed Sep 09 23:12:14.699274 2020] [proxy_ajp:error] [pid 3137] (70007)The timeout specified has expired: [client 自分のグローバルIP:49976] AH00878: read response failed from 127.0.0.1:8009 (127.0.0.1) ------  また、「Tomcatのajp設定を有効にする」とは、「/opt/apache-tomcat/conf/server.xml」内の8009番ポートの記述を有効にするということで合ってますでしょうか? 初歩的な質問で申し訳ないです・・・
A-pZ

2020/09/10 01:01

回答をもう一度読んでいただきたいのですが、 > 以下のconfのコメントアウトを解除したのち ですので、先頭の # を消してください。
kumaGoro_95

2020/09/10 13:35

申し訳ありません・・・「既にコメントアウトされていました。」はタイプミスです。 正しくは「コメントアウトは解除されていました。」でした。 誤解させてお手数おかけして、すみません。 ご回答いただき、ありがとうございました。
guest

0

ベストアンサー

javaとtomcatは分かりませんが、

ProxyPass / ajp://IPアドレス:8009/examples/

の部分
同一サーバー内の事だと思うので、IPアドレス127.0.0.1localhostにする事
外のネットワークを通りたいのならfirewallでポートを開放する事ですが、今回は上記対応がよろしいかと思われます

address="0.0.0.0"

上記対応と併せてこの記述も同一サーバー内なら127.0.0.1でいいでしょう

投稿2020/09/07 13:01

hentaiman

総合スコア6426

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

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

kumaGoro_95

2020/09/09 14:13 編集

ご回答ありがとうございます! > ProxyPass / ajp://IPアドレス:8009/examples/ 部分の「IPアドレス」部分を「127.0.0.0」に修正してみたところ、エラーの解消には至りませんでしたが、エラーログ内容が変わりました! ``` [Wed Sep 09 22:04:37.803230 2020] [proxy_ajp:error] [pid 2123] (70007)The timeout specified has expired: AH01030: ajp_ilink_receive() can't receive header [Wed Sep 09 22:04:37.803420 2020] [proxy_ajp:error] [pid 2123] [client 126.47.91.136:65293] AH00992: ajp_read_header: ajp_ilink_receive failed [Wed Sep 09 22:04:37.803437 2020] [proxy_ajp:error] [pid 2123] (70007)The timeout specified has expired: [client 自分のグローバルIP:65293] AH00878: read response failed from 127.0.0.1:8009 (127.0.0.1) ``` mod_proxy_ajpの方に問題があるということでしょうか。ちょっと調べてみます。
hentaiman

2020/09/09 13:43

済まないのだけど冒頭に書いた通りtomcatは分かりません。 ProxyPass / ajp://localhost:8009/ keepalive=on とりあえず↑の通りkeepalive=onを追加してみてください。 今までのエラーはリバースプロキシでグローバルIPを指定していたから外(ネットワークの外)からのアクセスという事になり、firewallで弾かれていたんです。なのでtomcatにアクセスが来ることも無いので当然アクセスログもエラーログも出ない事となります。 なのでそれをlocalhost(127.0.0.1)に書き換える事でinternalのアクセスとなりfirewallに弾かれなくなったのでtomcatへのアクセスが来るようになったのです。
kumaGoro_95

2020/09/10 13:41

更なるご教示ありがとうございます。 >keepalive=on を試してみたのですが、挙動・エラーログ共に変化はありませんでした。 その後、「/etc/httpd/conf.d/httpd-proxy.conf」にLocationの設定を追加して再度チャレンジしてみたところ、「http://IPアドレス/examples」でtomcatのexamplesページが表示されるようになりました。 ------ <Location /examples/> ProxyPass ajp://127.0.0.1:8009/examples/ </Location> ------- localhostについてご指摘いただいたおかげでなんとか解決にたどり着くことができました!ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問