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

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

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

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

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

Tomcat

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

Q&A

解決済

2回答

36849閲覧

【Tomcat】と【Apache】の連携に関して

Sfidante

総合スコア90

Apache

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

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

Tomcat

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

0グッド

0クリップ

投稿2015/08/26 00:50

編集2015/08/28 07:13

前回の投稿内容で解決とまで
いかなかったため、
改めてお伺いいたしたく投稿いたしました。

原因に関しては、前回の投稿から
ApachではなくTomcatの方にあるのではと考えられます。

ローカル環境ではWebSocektは利用できるのですが、
サーバーに上げたら
WebSockeが機能しなくなってしまいました。
WebSockeとApacheの連携がうまくいっていないようです。

利用している環境は
Apache:2.4.6
Tomcat:7.0.42
CentOS:6.5
です。

http://qiita.com/sion_cojp/items/a79ae08853528761cc30

http://normalse.hatenablog.jp/entry/2015/03/13/200755
を参照して設定を行ったのですが、
うまくいきません。

Webアプリのトップページには
http://www.◯◯.jp/◯◯/
で表示できるとします。

/etc/httpd/conf/extra/httpd-proxy.confの設定は

ProxyPass /◯◯/ ws://www.◯◯.jp/◯◯/ ProxyPassReverse /◯◯/ ws://www.◯◯.jp/◯◯/ ProxyPass /◯◯/ ajp://www.◯◯.jp:8009/◯◯/

としています。

httpd.confにおける設定は以下の通りです。

ServerRoot "/usr" Include /etc/httpd/conf/extra/httpd-proxy.conf Listen 80 LoadModule authn_file_module /etc/httpd/modules/mod_authn_file.so LoadModule authn_core_module /etc/httpd/modules/mod_authn_core.so LoadModule authz_host_module /etc/httpd/modules/mod_authz_host.so LoadModule authz_groupfile_module /etc/httpd/modules/mod_authz_groupfile.so LoadModule authz_user_module /etc/httpd/modules/mod_authz_user.so LoadModule authz_core_module /etc/httpd/modules/mod_authz_core.so LoadModule access_compat_module /etc/httpd/modules/mod_access_compat.so LoadModule auth_basic_module /etc/httpd/modules/mod_auth_basic.so LoadModule reqtimeout_module /etc/httpd/modules/mod_reqtimeout.so LoadModule filter_module /etc/httpd/modules/mod_filter.so LoadModule mime_module /etc/httpd/modules/mod_mime.so LoadModule log_config_module /etc/httpd/modules/mod_log_config.so LoadModule env_module /etc/httpd/modules/mod_env.so LoadModule headers_module /etc/httpd/modules/mod_headers.so LoadModule setenvif_module /etc/httpd/modules/mod_setenvif.so LoadModule version_module /etc/httpd/modules/mod_version.so LoadModule proxy_module /etc/httpd/modules/mod_proxy.so LoadModule proxy_ftp_module /etc/httpd/modules/mod_proxy_ftp.so LoadModule proxy_http_module /etc/httpd/modules/mod_proxy_http.so LoadModule proxy_wstunnel_module /etc/httpd/modules/mod_proxy_wstunnel.so LoadModule proxy_ajp_module /etc/httpd/modules/mod_proxy_ajp.so LoadModule mpm_event_module /etc/httpd/modules/mod_mpm_event.so LoadModule unixd_module /etc/httpd/modules/mod_unixd.so LoadModule status_module /etc/httpd/modules/mod_status.so LoadModule autoindex_module /etc/httpd/modules/mod_autoindex.so LoadModule dir_module /etc/httpd/modules/mod_dir.so LoadModule alias_module /etc/httpd/modules/mod_alias.so <IfModule unixd_module> User apache Group apache </IfModule> ServerAdmin you@example.com <Directory /> AllowOverride none Require all denied </Directory> DocumentRoot "/var/www/html" <Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> <IfModule dir_module> DirectoryIndex index.html </IfModule> <Files ".ht*"> Require all denied </Files> ErrorLog "/var/log/httpd/error_log" LogLevel warn <IfModule log_config_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common <IfModule logio_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio </IfModule> CustomLog "/var/log/httpd/access_log" common </IfModule> <IfModule alias_module> ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" </IfModule> <IfModule cgid_module> </IfModule> <Directory "/var/www/cgi-bin"> AllowOverride None Options None Require all granted </Directory> <IfModule mime_module> TypesConfig /etc/httpd/conf/mime.types AddType application/x-compress .Z AddType application/x-gzip .gz .tgz </IfModule> <IfModule proxy_html_module> Include /etc/httpd/conf/extra/proxy-html.conf </IfModule> <IfModule ssl_module> SSLRandomSeed startup builtin SSLRandomSeed connect builtin </IfModule>

【追記】
今まで、mod_proxyを利用していたと思っていたのですが、
httpdのエラーログを見たところ、

Apache/2.4.6 (Unix) mod_jk/1.2.37 configured -- resuming normal operations

との記載があり、mod_jkを利用していたようです。

そこで、mod_proxyを利用できるように、変えようと思って、
とりあえず、mod_jk関連のものを削除してApache、Tomcatを起動しました。
すると、

Apache/2.4.6 (Unix) configured -- resuming normal operations

となってしまいました。
起動には成功しているようですが、
これはmod_proxyを利用できていないようです。

また、httpd_proxy.confでの設定を全くしていない時でも、
ポート番号8080を抜いた記載でも、接続がおこなえます。
つまり、他の設定ファイルというで、
ApacheとTomcatの連携を行っているのでしょうか?

httpd.confの設定の問題かと思うのですが、
どこがおかしいのかご教授いただけると幸いです。


【追記】
server.xmlの設定になります。

<?xml version='1.0' encoding='utf-8'?> <Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <Listener className="org.apache.catalina.core.JasperListener" /> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <GlobalNamingResources> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> </GlobalNamingResources> <Service name="Catalina"> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" /> </Host> </Engine> </Service> </Server>

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

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

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

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

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

eripong

2015/08/26 05:05

再投稿にした理由と、これまでに分かったことを書いた方が良いと思います。
Sfidante

2015/08/26 05:26

再投稿した理由は解決まで至っておらず、 ネット検索をしても原因と解決策に辿りつけなかったからです。 わかったことは、原因はApacheではなくTomcatの方にある可能性が高いということです。 概念等もいまいちわかっておらず、このような回答しかできず申し訳ありません。
eripong

2015/08/28 06:29

サーバの構成や使っているポートが分からないのですが、ApacheとTomcatは別のサーバですか?AWSでは無いですよね?Tomcat側の設定も見せてもらえますか?
Sfidante

2015/08/28 07:19

ご返答ありがとうございます。 >ApacheとTomcatは別のサーバですか? 申し訳ありません。 別サーバーなのかどうかよくわからないです。 >AWSでは無いですよね? すみません。AWSを利用しております。 サーバー構築で躓いたため、 AWSマーケットプレイスである程度構築しているものを利用しており、 そちらを変更しております。 >Tomcat側の設定も見せてもらえますか? server.xmlの設定でよろしいでしょうか? 追記という形で記載いたしました。 よろしくお願いいたします。
eripong

2015/08/28 10:39

別サーバかどうかは、server.xmlやhttpd.confを編集する際に接続するサーバのIPアドレスかサーバ名が異なるか同じかで分かると思います。
eripong

2015/08/28 10:50 編集

接続がおこなえるというのは、どの様な操作をして、どの様な結果が得られることでしょうか?ApacheとTomcatのアクセスログは確認していますか?
Sfidante

2015/08/28 11:12

>別サーバかどうかは、server.xmlやhttpd.confを編集する際に接続するサーバのIPアドレスかサーバ名が異なるか同じかで分かると思います。ーーーーーーーーーーーーーーーーAWSにおいて、パブリックIPと編集時のIPアドレスが違うので、別サーバかと思われます。
Sfidante

2015/08/28 11:17

>ApacheとTomcatのアクセスログは確認していますか?ーーーーーーーーーーーーーーーーーーーーーApacheに関しては、アクセスログの出力はなく、エラーログしか出力されておりませんでした。 Tomcatに関しても同じく出力がないようです。見ている箇所が違うのかとも思いますが、access_logなるファイルを見ています。
eripong

2015/08/28 11:53

アクセスログがないのはおかしいですね。ApacheとTomcatを落として、アクセスしてみるとどうなりますか?
Sfidante

2015/08/29 03:46

ApecheとTomcatに関しては、再起動させながらおこなっているため、 ログは出力されるべきなのかなと思います。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー すみません。Apacheのアクセスログは変わらずに/var/log/httpd/access_logで出力がないのですが、Tomcatの方には/var/log/tomcat/localhost_access_log.2015-08-29.txtにログが残っておりました。
Sfidante

2015/08/29 03:48

http://www.☓☓☓☓.jp/examplesにアクセスしたところ次のようなログがありました。 ーーーーーーーーーーーーーーーーーーーーーーー 10.0.0.135 - - [29/Aug/2015:12:42:17 +0900] "GET /☓☓☓☓ HTTP/1.1" 302 - ーーーーーーーーーーーーーーーーーーーーーーー 10.0.0.135 - - [29/Aug/2015:12:42:23 +0900] "GET /examples HTTP/1.1" 302 - ーーーーーーーーーーーーーーーーーーーーーーー 10.0.0.135 - - [29/Aug/2015:12:42:23 +0900] "GET /examples/ HTTP/1.1" 200 1179
eripong

2015/08/29 04:03

Tomcatを落としているのにアクセスログが出るのですか?
eripong

2015/08/29 04:47 編集

apacheのエラーログとTomcatのアクセスログは同じサーバに出力されていますか? ss -lntpで、80番ポートで待っているプロセスが分かると思うのですが、どのプロセスが使っていますか?
Sfidante

2015/08/29 05:16

>Tomcatを落としているのにアクセスログが出るのですか?ーーーーーーーーーーーーーーー失礼しました。Tomcatを落としているときはログは出ません。
Sfidante

2015/08/29 05:17

>apacheのエラーログとTomcatのアクセスログは同じサーバに出力されていますか? ss -lntpで、80番ポートで待っているプロセスが分かると思うのですが、どのプロセスが使っていますか?ーーーーーーーーーーーーーーーーーーーーーーーーーー80番ポートを持っているプロセスは4つあり、全てhttpdでしたので、同じサーバーへの出力かと思われます。
eripong

2015/08/29 06:03

Apacheを落として、Tomcatを立ち上げているとき、アクセスできますか?
Sfidante

2015/08/29 06:29 編集

問題もなくアクセスできるようです。
eripong

2015/08/29 06:33

Apacheを落とした際、ssコマンドで80番ポートはどうなっていますか?無くなっていなければ、今見ているのと別のサーバにもApacheがあって、そちらとTomcatが連携しているのだと思います。
eripong

2015/08/29 06:40 編集

アクセスログにある10.0.0.135というのは、何のサーバのIPアドレスでしょうか?
Sfidante

2015/08/29 07:33

Apacheを落とした際、ssコマンドで80番ポートはどうなっていますか?ーーーーーーーーーーーーーーーーーーーーーーーーーssコマンドですとわかりにくかったため、netstatでおこなって確認したところ、 Apacheを停止するとhttpdがなくなり、起動するとhttpdが表示されるため、別サーバのApacheではないかと思います。
Sfidante

2015/08/29 07:39

アクセスログにある10.0.0.135というのは、何のサーバのIPアドレスでしょうか?ーーーーーーーーーーーーーーーーーーーーーーーーーAWSのEC2のプライベートIPが10.0.0.135ではないですが、10.0.0.◯◯ですので、それと関係があるのではないかと思うのですが、 AWSを調べましたが、10.0.0.135は見つかりませんでした。 あと、記載していなくて申し訳ないのですが、AWSでロードバランサを利用しておりますので、その影響でIPアドレスが10.0.0.135になっているのではないかと思います。
guest

回答2

0

ベストアンサー

紆余曲折ありましたが、結果として修正が必要だった点について記述します。

iptablesにポートの転送ルールが入っていた。

iptablesによって80番ポートへの通信が8080番ポートに転送されていた。
それにより、ELBからApacheを通らず直接Tomcatにアクセスしていた。
以下の様な設定が入っていたので、削除した。

-A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080 -A PREROUTING -p udp -m udp --dport 80 -j REDIRECT --to-ports 8080

http-proxy.confの設定に問題があった。

8080番ポートを指定しておらず、localhostではなくFQDNになっていた。
以下の設定を行った。

ProxyPass /◯◯/ ws://localhost:8080/◯◯/ ProxyPassReverse /◯◯/ ws://localhost:8080/◯◯/ ProxyPass /◯◯/ ajp://localhost:8009/◯◯/

※最終的にうまくいった設定ではない

SELinuxによってApacheとTomcatの通信が制限されていた。

http-proxy.confへの設定を行って起動すると、
Apacheのエラーログに以下が出力された。

[Tue Sep 01 00:06:13.923821 2015] [proxy:error] [pid 11518:tid 140522228266752] (13)Permission denied: AH00957: WS: attempt to connect to 127.0.0.1:8080 (localhost) failed [Tue Sep 01 00:06:13.924028 2015] [proxy:error] [pid 11518:tid 140522228266752] AH00959: ap_proxy_connect_backend disabling worker for (localhost) for 60s [Tue Sep 01 00:06:13.924054 2015] [proxy_wstunnel:error] [pid 11518:tid 140522228266752] [client 127.0.0.1:44894] AH02452: failed to make connection to backend: localhost

SELinuxによってApacheとTomcatの間の通信が制限されていたので、
以下の設定変更を行った。

$ /usr/sbin/setsebool httpd_can_network_connect true

投稿2015/08/29 08:48

編集2015/09/01 12:50
eripong

総合スコア1546

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

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

eripong

2015/08/29 09:02

それと、今80番ポートでHTTPのリクエストを受けているのは、 Apacheではない可能性もあります。
eripong

2015/08/29 09:15 編集

LBはELBでしょうか? どの様な設定をしていますか? EC2の8080に転送する設定にしていたりしないですか?
Sfidante

2015/08/29 09:23

>Tomcatとは別のようなので、ほかにEC2のインスタンスはありませんか? >LBがあるということですが、APacheとTomcatの間にあるということですか? まず、LBに接続後にEC2に振り分けるような設定になっております。 ですので、EC2自体は2つありますが、 LBはひとつのEC2にしか接続する設定にはしていないため、 別のEC2のApacheに接続されているということはないのかなと考えております。
eripong

2015/08/29 09:26

LBの設定についてはどうでしょうか?
Sfidante

2015/08/29 09:39

>LBの設定についてはどうでしょうか? まず、ポート構成に関しては、 「80 (HTTP)を 80 (HTTP)に転送します, 443 (HTTPS、証明書: ◯◯)を 80 (HTTP)に転送します」 との記載があります。 インスタンス情報に関しては インスタンスID | アベイラビリティ−ゾーン | ステータス    A     |      a       | InService アベイラビリティゾーン |       サブネットID      | サブネットCIDR | インスタンス数 | 正常?       a      |  Aインスタンスに紐付いたサブネット |  10.0.0.0/24  |   1     | はい といった感じになっております。 わかりにくかったらすみません。
eripong

2015/08/29 09:49

記載というのはどういうことでしょうか? GoUsamiさんが設定されたわけではなく、 何かのドキュメントに記載があるということでしょうか? 設定内容を直接確認できれば、その方がよいのですが。 それから、ELBですか?他の何かですか?
eripong

2015/08/29 09:52

あ、文言からするとELBの設定画面内容ですね。
Sfidante

2015/08/29 10:21

>ELBですか?他の何かですか? 失礼しました。 ELBを利用しております。 >記載というのはどういうことでしょうか? 上記のロードバランサーの設定を見てみますと、 「説明」という欄があり、 その項目を下記に記載いたします。 DNS 名 : 利用しているELB名(Aレコード) スキーム: internet-facing ステータス:1個うち1個のインスタンスが実行中です ポート構成:80 (HTTP)を 80 (HTTP)に転送します       維持設定: LBCookieStickinessPolicy, expirationPeriod='1800'       443 (HTTPS、証明書: ◯◯)を 80 (HTTP)に転送します       維持設定: LBCookieStickinessPolicy, expirationPeriod='1800' アベイラビリティーゾーン:サブネット名 - ap-northeast-1a クロスゾーン負荷分散:有効 ソースセキュリティグループ:所有者のエイリアス:☓☓☓☓☓☓☓☓☓☓           グループ名:セキュリティグループ(http・tcp・80・0.0.0.0/0) ホストゾーン ID:このホストゾーンの値が見当たらない VPC ID:インスタンスと紐付けているVPC アクセスログ:無効 接続設定:アイドルタイムアウト:60秒 このような設定になっております。 懸念されるのはホストゾーンIDでしょうか
eripong

2015/08/29 11:07

うーん、不可解ですね。 もう一つのEC2はどの様な位置づけですか? そのインスタンスを落としても、Webアクセスできますか?
Sfidante

2015/08/29 11:15

落としてみたところ 画面が真っ白になり、ファビコンだけ表示という状態でした。
eripong

2015/08/29 11:21

ということは、そのインスタンスにリクエストが飛んでいたのですね。 確認ですが、「そのインスタンス」はこれまでApacheの設定をしていたインスタンスとは 違うインスタンスですよね?
Sfidante

2015/08/29 11:34

すみません。色々と勘違いしていた可能性があります。 インスタンスを落とした時に、 Apache等を設定していたコマンドラインの方でも The system is going down for power off NOW! といったメッセージが出てきたので、 インスタンスは同じなのかと思います。
eripong

2015/08/29 11:49 編集

では、整理できたらでいいので、二つのインスタンスについて、状況を教えていただけますか?
Sfidante

2015/08/29 15:29

遅くなり申し訳ありません。 一つ目のインスタンスの設定状況は プライベートIP:このIPアドレスでApache等の変更をコマンドラインでおこなっています VPC ID:vpc-a サブネット:subnet-a ネットワークインターフェイス:network-a ルートデバイスタイプ:ebs パブリックDNS:ec2-52-◯◯-◯◯-◯◯.ap-northeast-1.compute.amazonaws.com パブリックIP:52.◯◯.◯◯.◯◯ ElasticIP:- アベイラビリティ−ゾーン:ap-norteast-1a セキュリティグループ:HTTP/TCP/80/セキュリティグループa            HTTPS/TCP/443/セキュリティグループa            SSH/TCP/22/0.0.0.0/0 (セキュリティグループa:HTTP/TCP/80/0.0.0.0/0             HTTPS/TCP/443/0.0.0.0/0) AMI ID:Cent OS 2つ目のインスタンスの設定状況は プライベートIP: VPC ID:vpc-a サブネット:subnet-b ネットワークインターフェイス:network-a ルートデバイスタイプ:ebs パブリックDNS:ec2-52-☓☓-☓☓-☓☓.ap-northeast-1.compute.amazonaws.com パブリックIP:52.☓☓.☓☓.☓☓ ElasticIP:52.☓☓.☓☓.☓☓ アベイラビリティ−ゾーン:ap-norteast-1c セキュリティグループ:HTTP/TCP/80/0.0.0.0/0            SMTP/TCP/25/0.0.0.0/0            SSH/TCP/22/0.0.0.0/0 AMI ID:Amazon Linux といった感じです。 他にどんな設定内容が必要か言っていただけるとありがたいです。 何卒、よろしくお願い致します。
eripong

2015/08/30 00:42 編集

認識を合わせておきたいです。 1.一つ目のインスタンスで、Apacheを落とし、Tomcatを起動した状態で、   Webアクセスすると、何故か8080番ポートで待ち受けているTomcatの   アクセスログが出力される。 2.Webアクセスは80番ポートへのアクセスで、Tomcatは8080番ポートなので、   途中でポートが変わっている。 3.ポートを変えているのが何か分からないので調べたい。Apacheは落としてあるので、   Apacheではない。そもそも、このインスタンスでは80番ポートで待ち受けている プロセスはない。 この認識はあってますか? Tomcatのアクセス元が何か、心当たりはないですか?
eripong

2015/08/30 00:42 編集

心当たりがない場合、 一つ目のインスタンスでtcpdumpなどでパケットをキャプチャして、 内容確認することは出来ますか?
Sfidante

2015/08/30 05:20

認識に関してですが、 1.一つ目のインスタンスで、Apacheを落とし、Tomcatを起動した状態で、 Webアクセスすると、何故か8080番ポートで待ち受けているTomcatの アクセスログが出力される。 →すみません、こちらに関しては、  Apacheを落としTomcatが起動状態ですと、Tomcatのアクセスログは出力されません。 2.Webアクセスは80番ポートへのアクセスで、Tomcatは8080番ポートなので、 途中でポートが変わっている。 →そのとおりです。 http://www.aaa.jp/でWebアクセスを行うとTomcatのトップページが表示されます。 http://www.aaa.jp:8080/でWebアクセスをおこなってもERR_CONNECTION_TIMED_OUTというエラーになりアクセス出来ません。 3.ポートを変えているのが何か分からないので調べたい。Apacheは落としてあるので、 Apacheではない。そもそも、このインスタンスでは80番ポートで待ち受けている プロセスはない。 →ポートを変えているものを知りたいということで間違いありません。  待ち受けているポートに関して、Apacheの起動時と停止時に関して  netstat -an | grep LISTENで確認したとこと以下のようになりました。  【起動時】 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp 0 0 :::80 :::* LISTEN tcp 0 0 :::22 :::* LISTEN tcp 0 0 :::3306 :::* LISTEN  【停止時】 tcp 0 0 0.0.0.0:22   0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25   0.0.0.0:* LISTEN tcp 0 0 :::8080   :::* LISTEN tcp 0 0 :::22   :::* LISTEN tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN tcp 0 0 :::8009   :::* LISTEN tcp 0 0 :::3306 :::* LISTEN
eripong

2015/08/30 06:30

確認して良かったです。 「Apacheを落として、Tomcatを立ち上げているとき、アクセスできますか?」 「問題なくアクセスもできるようです」 というやりとりがあったので、1.のように考えたのですが、 これはどういう意味だったのですか? 1.がそうであるなら、Apacheが80番ポートで受けて、 Tomcatの8080番ポートに送信しているということです。
Sfidante

2015/08/30 07:25

申し訳ありません。 確かにそのようなやりとりをさせていただいておりました。 その時は何らかのミスによりそのような結果になってしまったのかと思います。 混んがらせてしまい、申し訳ありませんでした。
eripong

2015/08/30 08:19

あ、言葉の使い方などですれ違っていたのであれば、 合わせておいた方が良いと思ったので、それほど気にされなくて大丈夫です。 どうにも不可解だったので、逆にスッキリしました。
eripong

2015/08/30 08:27

httpd-proxy.confに何も設定しなくても、アクセスに成功するというのは、 実際その通りでしょうか?
Sfidante

2015/08/30 08:57 編集

お心遣い感謝いたします。 >httpd-proxy.confに何も設定しなくても、アクセスに成功するというのは、 実際その通りでしょうか? これに関しては間違いないです。 現状、 http://www.aaa.jpと入力してWebアクセスするとTomcatのトップページが表示されhttp://www.aaa.jp/aaa/とするとTomcatのwebapps内にデプロイしたindex.htmlが表示されております。 また、同一インスタンス上に同じようなファイルが存在するのではないかと重い、 find -name '*httpd-proxy.conf*'で調べたりしましたが、他には存在しないようでした。
eripong

2015/08/30 09:03

mod-proxy-html.confには何が記述されていますか?
eripong

2015/08/30 09:10

proxy_html_moduleがLoadModuleされていないので関係なさそうですね。
Sfidante

2015/08/30 09:13

mod-proxy-html.confというファイルはなく、 httpd-proxy.confと同じ階層に proxy-html.confというファイルがあったので、そちらでしたら ProxyHTMLLinks a href ProxyHTMLLinks area href ProxyHTMLLinks link href ProxyHTMLLinks img src longdesc usemap ProxyHTMLLinks object classid codebase data usemap ProxyHTMLLinks q cite ProxyHTMLLinks blockquote cite ProxyHTMLLinks ins cite ProxyHTMLLinks del cite ProxyHTMLLinks form action ProxyHTMLLinks input src usemap ProxyHTMLLinks head profile ProxyHTMLLinks base href ProxyHTMLLinks script src for ProxyHTMLEvents onclick ondblclick onmousedown onmouseup \ onmouseover onmousemove onmouseout onkeypress \ onkeydown onkeyup onfocus onblur onload \ onunload onsubmit onreset onselect onchange との記載がありました。
Sfidante

2015/08/30 09:16

LoadModuleを一つずつ絞っていくというのも必要でしょうか??
eripong

2015/08/30 10:18

不要なモジュールであれば、無効にしてよいと思います。 10.0.0.135という、Tomcatのアクセスログに出ていたアドレスが気になっています。 ApacheからELBを介してTomcatにアクセスするというのは、 教えていただいたELBの設定はインターネットむけの設定だったので、おかしいと思います。 ELBのアクセスログを出すように出来ませんか? また、curlコマンドで8080にアクセスした場合に、Tomcatのアクセスログには どう記録されますか?
eripong

2015/08/30 10:33

それから、80番ポートにアクセスした際のアクセスログは、どうでしょうか?
Sfidante

2015/08/31 01:47 編集

>10.0.0.135という、Tomcatのアクセスログに出ていたアドレスが気になっています。 こちらのIPアドレスですが、AWSにおける「ネットワークインターフェース」のプライマリプライベートIPのようです。 また、こちらですが、先ほどアクセスしてログを見てみたところ、 10.0.0.157からのアクセスに変わっており、こちらも同じくネットワークインターフェースのプライマリプライベートIPです。 これらのネットワークインターフェースは同じ サブネット ID・VPC ID・アベイラビリティゾーン・セキュリティグループで設定したありました。 >ELBのアクセスログを出すように出来ませんか? ELBのログは下記のようになりました。 2015-08-30T15:18:33.121735Z (ELB名) (接続元).18:19904 (EC2のプライベートIP):80 0.00009 0.020023 0.000024 200 200 0 11223 "GET http://www.aaa.jp:80/ HTTP/1.1" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36" - - >curlコマンドで8080にアクセスした場合に、 >Tomcatのアクセスログにはどう記録されますか? curlコマンドは curl http://www.aaa.jp:8080 で間違いなでしょうか? その場合、下記のように出力されます。 10.0.0.157 - - [31/Aug/2015:00:44:55 +0900] "GET / HTTP/1.1" 200 11243 10.0.0.157はAWSのネットワークインターフェースのプライマリプライベートIPです。 >80番ポートにアクセスした際のアクセスログは、どうでしょうか? 同じように curl http://www.aaa.jp と行うと下記のように出力されます。 127.0.0.1 - - [31/Aug/2015:00:41:17 +0900] "GET / HTTP/1.1" 200 45 よろしくお願いいたします。
eripong

2015/08/30 23:43

curlコマンド実行をしたインスタンスは、Apacheなどを設定しているインスタンスと同じですか? 違う場合、curlコマンド実行をしたインスタンスに、Apacheは入っていますか?
eripong

2015/08/30 23:52

それから、ELBのアクセスログで、(EC2のプライベートIP)となっているのは 10.0.0.157ですか? ネットワークインターフェースのプライマリプライベートIPは、 どのインスタンスのものでしょうか?
eripong

2015/08/31 00:13

80番ポートにアクセスした際のみ、レスポンスのbyte数が45で、 127.0.0.1からのアクセスになっているのが気になっています。 どんなhtmlが帰ってきていますか? また、ここだけ、www.aaa.jpになっていないのは誤記でしょうか?
Sfidante

2015/08/31 05:09

>curlコマンド実行をしたインスタンスは、Apacheなどを設定しているインスタンスと同じですか? 同じインスタンスでcurlコマンドを実行しております。 >それから、ELBのアクセスログで、(EC2のプライベートIP)となっているのは >10.0.0.157ですか? また別のプライベートIPとなっておりまして、10.0.0.◯◯です。 >ネットワークインターフェースのプライマリプライベートIPは、 >どのインスタンスのものでしょうか? インスタンスとは直接紐付いていないようです。 その辺をもう少し調べます。 >80番ポートにアクセスした際のみ、レスポンスのbyte数が45で、 >127.0.0.1からのアクセスになっているのが気になっています。 >どんなhtmlが帰ってきていますか? TomcatのトップページのHTMLが返ってきているようです。 >ここだけ、www.aaa.jpになっていないのは誤記でしょうか? すみません、誤記です。
eripong

2015/08/31 05:51

8080番ポートにアクセスした際は、80番ポートと別のHTMLと思いますが、 どの様な内容ですか?
Sfidante

2015/08/31 06:37

Webアクセス時も同じなのですが、 http://www.aaa.jp:8080とすると 数分間後にタイムアウトになります。 つまり、HTMLは出力されません。
Sfidante

2015/08/31 06:57

>ネットワークインターフェースのプライマリプライベートIPは、 >どのインスタンスのものでしょうか? これに関してはインスタンスではなく、ELBに対するネットワークインターフェースのようです。
eripong

2015/08/31 07:05

10.0.0.157 - - [31/Aug/2015:00:44:55 +0900] "GET / HTTP/1.1" 200 11243 というアクセスログが出力されるということだったので、 200応答でHTMLが返ったと思ったのですが、 タイムアウトだとおそらくTomcatに届いていないのでアクセスログは出ないのでは?
eripong

2015/08/31 07:10

一つ目のインスタンスに二つのIPアドレスが設定されているのでは? ifconfig -aすると、10.0.0.157が表示されませんか?
Sfidante

2015/08/31 07:14

すみません。 再度試してみましたが、アクセスログは出ませんでした。 混乱させてしまい申し訳ありません。
Sfidante

2015/08/31 07:21 編集

10.0.0.157という表示はなく、 eth0(ネットワークインターフェイス)の方は inet addr:1つ目のインスタンスのプライベートIP が表示されており、 loの方hは inet addr:127.0.0.1 という表示がございます。
eripong

2015/08/31 07:34

タイムアウトの件を教えていただければ、そこから推測できると思うので、 何かエラーになった場合は、教えてください。 curl http://localhost:8080 とすると、どうなりますか?
eripong

2015/08/31 07:43

ネットワークインタフェースについてはひとまず了解です。
Sfidante

2015/08/31 07:51

127.0.0.1 - - [31/Aug/2015:16:50:14 +0900] "GET / HTTP/1.1" 200 11243 となり、localhostからしっかりとアクセスできているようです。
eripong

2015/08/31 08:06

curl http://www.aaa.jp した際とレスポンスのbyte数が異なりますが、 HTMLはどの様な内容ですか?
eripong

2015/08/31 08:18

バラバラとすみません。 curl http://localhost だとアクセスログとHTMLはどうでしょうか?
Sfidante

2015/08/31 09:01

>curl http://www.aaa.jp >した際とレスポンスのbyte数が異なりますが、 >HTMLはどの様な内容ですか? 相互比較してみましたが、異なっている部分はないようです。 >curl http://localhost >だとアクセスログとHTMLはどうでしょうか? アクセスログは curl http://www.aaa.jp と同じく、 127.0.0.1 - - [31/Aug/2015:17:55:16 +0900] "GET / HTTP/1.1" 200 45 となりました。 HTMLに関しては、Apacheのトップページの <html><body><h1>It works!</h1></body></html> となりました。
eripong

2015/08/31 09:49

curl http://localhost でApacheのトップページが返るということは、 この場合のアクセスログはApacheのアクセスログですか?
Sfidante

2015/08/31 11:33

アクセスログはApacheのものになります。 Tomcatには出ていないようです。
eripong

2015/08/31 14:05

すると、http://localhostやhttp://www.aaa.jpにApacheの あるインスタンスからアクセスすると、Tomcatに転送されずに Apacheのトップページが表示される、ということですね。 http-proxy.confに ProxyPass /◯◯/ ws://localhost:8080/◯◯/ ProxyPassReverse /◯◯/ ws://localhost:8080/◯◯/ ProxyPass /◯◯/ ajp://localhost:8009/◯◯/ として、 curl http://localhost/◯◯/ でアクセスすると、アクセスログとHTMLはどうなりますか?
eripong

2015/08/31 14:09

ApacheとTomcatの両方にアクセスログが出力され、 WebアプリのトップページがHTMLとして返ってくると想定通りなのですが、 どうでしょうか?
Sfidante

2015/08/31 14:25

結果としては、 HTMLは <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> </head><body> <h1>Not Found</h1> <p>The requested URL /◯◯/ was not found on this server.</p> </body></html> となり、 アクセスログは、 Tomcatには出ず、Apacheのみへの出力となりました。 内容は、 127.0.0.1 - - [31/Aug/2015:23:22:07 +0900] "GET /◯◯/ HTTP/1.1" 404 206 でした。
eripong

2015/08/31 14:30 編集

おっと、そうですか。 それにしても、何らか振る舞いが変わったということですね。 今までは、設定しても変化がなかったので、一歩前進ではあると思います。 ○○の部分は実際のWebアプリのものにした、ということでよいでしょうか?
Sfidante

2015/08/31 14:36

長い間お付き合いいただきありがとうございます。 ◯◯の部分は実際のWebアプリのものにいたしました。 また、/examples/websocket/でも試してみましたが、 結果は同じでした。
eripong

2015/08/31 14:54

念の為の確認ですが、 Includeでhttp-proxy.confは読み込んでいて、 設定後Apacheの再起動は行っていますよね?
Sfidante

2015/08/31 15:09

大変失礼いたしました。 再起動を行っていなかったです。 結果が変わり、 HTMLが <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>503 Service Unavailable</title> </head><body> <h1>Service Unavailable</h1> <p>The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.</p> </body></html> となり、Tomcatのログは出ませんでした。 そして、Apacheのログは 127.0.0.1 - - [01/Sep/2015:00:06:13 +0900] "GET /◯◯/ HTTP/1.1" 503 299 でした。
eripong

2015/08/31 15:10

Apache起動時にエラーログは出ていないですか?
Sfidante

2015/08/31 15:19

いくつかエラーログがございました。 [Tue Sep 01 00:06:13.923821 2015] [proxy:error] [pid 11518:tid 140522228266752] (13)Permission denied: AH00957: WS: attempt to connect to 127.0.0.1:8080 (localhost) failed [Tue Sep 01 00:06:13.924028 2015] [proxy:error] [pid 11518:tid 140522228266752] AH00959: ap_proxy_connect_backend disabling worker for (localhost) for 60s [Tue Sep 01 00:06:13.924054 2015] [proxy_wstunnel:error] [pid 11518:tid 140522228266752] [client 127.0.0.1:44894] AH02452: failed to make connection to backend: localhost
eripong

2015/08/31 15:28

netstatで見て、8009と8080はLISTENしていますか? また、 ProxyPass /examples/websocket/ ws://localhost:8080/examples/websocket/ ProxyPassReverse /examples/websocket/ ws://localhost:8080/examples/websocket ProxyPass /examples/ ajp://localhost:8009/examples でも同じエラーになりますか?
Sfidante

2015/08/31 15:58

>netstatで見て、8009と8080はLISTENしていますか? netstat -ntplで見まして、8009と8080はLISTENになっておりました。 >ProxyPass /examples/websocket/ ws://localhost:8080/examples/websocket/ >ProxyPassReverse /examples/websocket/ ws://localhost:8080/examples/websocket >ProxyPass /examples/ ajp://localhost:8009/examples >でも同じエラーになりますか? こちらに関しては同じようなHTML表示やerror_logとなりました。 >SELinuxが有効になっていますか? こちらに関しては、有効になっていなかったようです。 ご教授いただいたサイトのことを試したところ、 curl http://localhost/◯◯/ で、意図するトップページのHTMLが表示され、error_logも出力されなくなりました。
eripong

2015/08/31 16:11 編集

お、また一歩進みましたね。 紹介したサイトは、SELinuxが有効になっている場合の対処法なので、 それで改善したなら、有効になっていると言うことです。 トップページのHTMLが表示された際、アクセスログはどうなっていますか? それと、設定ですが、お伝えした内容でなく、 ProxyPass /◯◯/websocket ws://localhost:8080/◯◯/websocket ProxyPassReverse /◯◯/websocket ws://localhost:8080/◯◯/websocket ProxyPass /◯◯/ ajp://localhost:8009/◯◯/ と言うイメージで、wsの行をwebsocketの通信を必要とするパスに 変える必要があるようです。
Sfidante

2015/08/31 16:14

こんなにもお付き合いいただき、ありがとうございます。 >トップページのHTMLが表示された際、アクセスログはどうなっていますか? Apacheの方が 127.0.0.1 - - [01/Sep/2015:00:54:10 +0900] "GET /◯◯/ HTTP/1.1" 200 - となっており、 Tomcatの方が 127.0.0.1 - - [01/Sep/2015:00:54:10 +0900] "GET /◯◯/ HTTP/1.1" 200 10702 となっておりました。 >ProxyPass /◯◯/websocket ws://localhost:8080/◯◯/websocket >ProxyPassReverse /◯◯/websocket ws://localhost:8080/◯◯/websocket >ProxyPass /◯◯/ ajp://localhost:8009/◯◯/ >と言うイメージで、wsの行をwebsocketの通信を必要とするパスに >変える必要があるように思います。 そうなのですね。 その辺の設定もいまいちよくわからずにいました。 ありがとう御座います。
eripong

2015/08/31 16:35

ブラウザからアクセスした場合、 ELB、Apache、Tomcatのアクセスログはどうなっていますか? それから、思いつきですが、SELinuxを無効にして、 ブラウザからアクセスするとWebSocket含めてうまく動いたりしませんか?
Sfidante

2015/08/31 17:05

まず、ELBでのログは以下のとおりです。 2015-08-31T16:45:43.680243Z ELB (自分のグローバルIP):63628 (インスタンスのプライベートIP):80 0.000098 0.006153 0.000021 304 304 0 0 "GET http://www.aaa.jp:80/◯◯/ HTTP/1.1" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36" - - となっております。 そして、Apacheのアクセスログは出力されず、 Tomcatの方は 10.0.0.157 - - [01/Sep/2015:02:01:22 +0900] "GET /◯◯ HTTP/1.1" 302 - となりました。 >SELinuxを無効にして、ブラウザからアクセスするとWebSocket含めてうまく動いたりしませんか? 実行してみましたが、curl http://localhost/◯◯/で 503のHTMLになってしまいました。
eripong

2015/08/31 22:37 編集

可能性ですが、 iptables –list したら、80番ポートを8080番ポートに変換するルールがあったりしませんか? 一度、iptablesのサービスを落として、ブラウザからアクセスすると アクセスログはどうなるでしょうか? また、SELinuxの無効化ですが、 http://rfs.jp/server/security/selinux01.html にあるような手順ですがその様にしましたか? 少し気になるのですが、 インスタンスの設定はGoUsamiさんが実施したわけでは無いのでしょうか? SELinuxを使っているなら、Apache用の設定が必要と思うので、 それは把握されているはずと思うのですが。
eripong

2015/08/31 22:45

解決しない場合、パケットキャプチャの結果を確認したいです。 tcpdump -s0 -A port 80 or port 8080 した上で、ブラウザからアクセスすると、 何がキャプチャされますか?
Sfidante

2015/09/01 02:41

>インスタンスの設定はGoUsamiさんが実施したわけでは無いのでしょうか? すみません、インスタンス等の設定は別のものがしており、 ApacheとTomcatの連携やWebSocketの設定をわたしがしている状況です。 ですので、しっかり把握できておらず申し訳ありません。 >SELinuxの無効化ですが、 >http://rfs.jp/server/security/selinux01.html >にあるような手順ですがその様にしましたか? 無効化できていなかったようです。 >iptablesのサービスを落として、ブラウザからアクセスすると >アクセスログはどうなるでしょうか? /etc/init.d/iptables stopで落とした後、 http://www.aaa.jpでアクセスすると、 Apacheのトップページが表示され、 10.0.0.157 - - [01/Sep/2015:10:47:35 +0900] "GET / HTTP/1.1" 200 45 というログが出力されました。 http://www.aaa.jp:8080はタイムアウトになります。 また、http://www.aaa.jp/◯◯/にアクセスすると、 Apacheでは、最初は 10.0.0.135 - - [01/Sep/2015:11:08:28 +0900] "-" 408 - というログなのですが、 数秒後に 10.0.0.135 - - [01/Sep/2015:11:08:10 +0900] "GET /◯◯/ HTTP/1.1" 500 - という結果になりました。 Tomcat側では出ないようです。 今回のアプリはFacebookのOAuthを利用しており、 iptablesを停止させるとログインできなくなるようです。
eripong

2015/09/01 03:09 編集

他の方が設定したということ、了解です。 その方に聞けば分かるが、時間がかかる、ということでしょうか。 SELinuxについても了解です。 ひとまずは今の状態でも動くようなので、そのままでも良いと思います。 iptablesをstopしたらApacheにつながるということは、 iptablesで80番ポートから8080番ポートに転送しているということと思います。 その設定を消しておけば、iptablesを有効にして、 Webアプリが動くのではと思います。
Sfidante

2015/09/01 05:29

ありがとうございます。 http://qiita.com/kawaz/items/ed0030cb29c7d0497b63 にある設定が80ポートと8080番ポートの間でなされていたようです。 それを解除することによって、 通常の軌道に戻りました。 あとは、httpd-proxy.confやhttp.confに設定を加えていけば大丈夫だと思います。 長々とお付き合いいただきありがとうございました。
eripong

2015/09/01 06:33

やっとここまで来ましたね。 良かったです。
eripong

2015/09/01 09:20

最終的に修正が必要だった点で回答を更新しました。 実際に動くようになったら、それに合わせて更新したいので、 その設定を教えていただけないでしょうか?
Sfidante

2015/09/01 09:42

まとめていただきありがとうございます。 iptablesに関しては、 -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080 -A PREROUTING -p udp -m udp --dport 80 -j REDIRECT --to-ports 8080 の2行が*netに入っていたので削除いたしました。 httpd-proxy.confに関してはまだ完全に動いてはいない状態です。 後ほどお伝えいたします。 SELinuxに関しては、記載されている通りに実行いたしました。
guest

0

(サーバ側は何を使って開発しているんですかね?)私はcwebsocketがだめで、libwebsocketsだとうまくいった経験があります。両方ともC言語ライブラリですけど。

ところで、WebSocketはポート:443を使いませんでしたっけ?

http://blog.mitsuruog.info/2012/10/websocket.html
が参考にならないでしょうか?

できることなら、WireSharkなどパケットモニタを使ってどこまで通信が届いているか見てみたり、サーバ側のログを見てみたりすることをお勧めします。

何かエラー・ログが残っていませんかね?

投稿2015/08/26 13:23

tchofu

総合スコア87

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

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

yuba

2015/08/26 14:10

WebSocketは80番であっています。 443はHTTPS上でのWebSocketで Secure WebSocket と呼び、URLは wss:// になります。
Sfidante

2015/08/27 03:17

ご回答ありがとうございます。 サーバー側の開発言語はJavaでおこなっております。 >何かエラー・ログが残っていませんかね? エラーログは出ていないように思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問