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

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

ただいまの
回答率

90.34%

  • Apache

    1912questions

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

  • Tomcat

    577questions

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

  • WebSocket

    176questions

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

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 10K+

Sfidante

score 90

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

原因に関しては、前回の投稿から
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>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • eripong

    2015/08/29 15:39 編集

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

    キャンセル

  • Sfidante

    2015/08/29 16:33

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

    キャンセル

  • Sfidante

    2015/08/29 16: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になっているのではないかと思います。

    キャンセル

回答 2

checkベストアンサー

+1

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

 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 18:02

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

    キャンセル

  • 2015/08/29 18:04 編集

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

    キャンセル

  • 2015/08/29 18:23

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

    キャンセル

  • 2015/08/29 18:26

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

    キャンセル

  • 2015/08/29 18:39

    >LBの設定についてはどうでしょうか?
    まず、ポート構成に関しては、
    「80 (HTTP)を 80 (HTTP)に転送します, 443 (HTTPS、証明書: ◯◯)を 80 (HTTP)に転送します」
    との記載があります。

    インスタンス情報に関しては
    インスタンスID | アベイラビリティ−ゾーン | ステータス
       A     |      a       | InService

    アベイラビリティゾーン |       サブネットID      | サブネットCIDR | インスタンス数 | 正常?
          a      |  Aインスタンスに紐付いたサブネット |  10.0.0.0/24  |   1     | はい

    といった感じになっております。
    わかりにくかったらすみません。

    キャンセル

  • 2015/08/29 18:49

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

    それから、ELBですか?他の何かですか?

    キャンセル

  • 2015/08/29 18:52

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

    キャンセル

  • 2015/08/29 19: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でしょうか

    キャンセル

  • 2015/08/29 20:07

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

    キャンセル

  • 2015/08/29 20:15

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

    キャンセル

  • 2015/08/29 20:21

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

    キャンセル

  • 2015/08/29 20:34

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

    キャンセル

  • 2015/08/29 20:46 編集

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

    キャンセル

  • 2015/08/30 00: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

    といった感じです。
    他にどんな設定内容が必要か言っていただけるとありがたいです。
    何卒、よろしくお願い致します。

    キャンセル

  • 2015/08/30 09:38 編集

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

    Tomcatのアクセス元が何か、心当たりはないですか?

    キャンセル

  • 2015/08/30 09:41 編集

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

    キャンセル

  • 2015/08/30 14: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

    キャンセル

  • 2015/08/30 15:30

    確認して良かったです。

    「Apacheを落として、Tomcatを立ち上げているとき、アクセスできますか?」
    「問題なくアクセスもできるようです」
    というやりとりがあったので、1.のように考えたのですが、
    これはどういう意味だったのですか?

    1.がそうであるなら、Apacheが80番ポートで受けて、
    Tomcatの8080番ポートに送信しているということです。

    キャンセル

  • 2015/08/30 16:25

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

    キャンセル

  • 2015/08/30 17:19

    あ、言葉の使い方などですれ違っていたのであれば、
    合わせておいた方が良いと思ったので、それほど気にされなくて大丈夫です。

    どうにも不可解だったので、逆にスッキリしました。

    キャンセル

  • 2015/08/30 17:27

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

    キャンセル

  • 2015/08/30 17:56 編集

    お心遣い感謝いたします。

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

    これに関しては間違いないです。
    現状、
    http://www.aaa.jpと入力してWebアクセスするとTomcatのトップページが表示され、
    http://www.aaa.jp/aaa/とするとTomcatのwebapps内にデプロイしたindex.htmlが表示されております。

    また、同一インスタンス上に同じようなファイルが存在するのではないかと重い、
    find -name '*httpd-proxy.conf*'で調べたりしましたが、他には存在しないようでした。

    キャンセル

  • 2015/08/30 18:03

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

    キャンセル

  • 2015/08/30 18:10

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

    キャンセル

  • 2015/08/30 18: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
    との記載がありました。

    キャンセル

  • 2015/08/30 18:16

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

    キャンセル

  • 2015/08/30 19:18

    不要なモジュールであれば、無効にしてよいと思います。

    10.0.0.135という、Tomcatのアクセスログに出ていたアドレスが気になっています。
    ApacheからELBを介してTomcatにアクセスするというのは、
    教えていただいたELBの設定はインターネットむけの設定だったので、おかしいと思います。

    ELBのアクセスログを出すように出来ませんか?
    また、curlコマンドで8080にアクセスした場合に、Tomcatのアクセスログには
    どう記録されますか?

    キャンセル

  • 2015/08/30 19:33

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

    キャンセル

  • 2015/08/31 00:54 編集

    >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

    よろしくお願いいたします。

    キャンセル

  • 2015/08/31 08:43

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

    キャンセル

  • 2015/08/31 08:52

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

    キャンセル

  • 2015/08/31 09:13

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

    キャンセル

  • 2015/08/31 14: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になっていないのは誤記でしょうか?
    すみません、誤記です。

    キャンセル

  • 2015/08/31 14:51

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

    キャンセル

  • 2015/08/31 15:37

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

    キャンセル

  • 2015/08/31 15:57

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

    キャンセル

  • 2015/08/31 16:05

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

    キャンセル

  • 2015/08/31 16:10

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

    キャンセル

  • 2015/08/31 16:14

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

    キャンセル

  • 2015/08/31 16:20 編集

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

    キャンセル

  • 2015/08/31 16:34

    タイムアウトの件を教えていただければ、そこから推測できると思うので、
    何かエラーになった場合は、教えてください。

    curl http://localhost:8080
    とすると、どうなりますか?

    キャンセル

  • 2015/08/31 16:36

    >タイムアウトの件を教えていただければ、そこから推測できると思うので、
    >何かエラーになった場合は、教えてください。
    かしこまりました。ありがとうございます。

    >curl http://localhost:8080
    >とすると、どうなりますか?
    こちらは、
    curl http://www.aaa.jpと同じようにtomcatのトップページのHTMLが表示されます。

    キャンセル

  • 2015/08/31 16:43

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

    キャンセル

  • 2015/08/31 16:46

    curl http://localhost:8080
    した際のアクセスログはどうなりますか?

    キャンセル

  • 2015/08/31 16:51

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

    キャンセル

  • 2015/08/31 17:06

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

    キャンセル

  • 2015/08/31 17:18

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

    キャンセル

  • 2015/08/31 18: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>
    となりました。

    キャンセル

  • 2015/08/31 18:49

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

    キャンセル

  • 2015/08/31 20:33

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

    キャンセル

  • 2015/08/31 23: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はどうなりますか?

    キャンセル

  • 2015/08/31 23:09

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

    キャンセル

  • 2015/08/31 23: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
    でした。

    キャンセル

  • 2015/08/31 23:29 編集

    おっと、そうですか。
    それにしても、何らか振る舞いが変わったということですね。
    今までは、設定しても変化がなかったので、一歩前進ではあると思います。

    ○○の部分は実際のWebアプリのものにした、ということでよいでしょうか?

    キャンセル

  • 2015/08/31 23:36

    長い間お付き合いいただきありがとうございます。

    ◯◯の部分は実際のWebアプリのものにいたしました。
    また、/examples/websocket/でも試してみましたが、
    結果は同じでした。

    キャンセル

  • 2015/08/31 23:54

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

    キャンセル

  • 2015/09/01 00: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
    でした。

    キャンセル

  • 2015/09/01 00:10

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

    キャンセル

  • 2015/09/01 00: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

    キャンセル

  • 2015/09/01 00: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
    でも同じエラーになりますか?

    キャンセル

  • 2015/09/01 00:31 編集

    SELinuxが有効になっていますか?
    https://viewsby.wordpress.com/2012/07/03/13permission-denied-proxy-http-attempt-to-connect-to-127-0-0-18080-localhost-failed/
    にあるような設定を行って対処できませんか?
    あるいは、必要なければSELinuxを無効にしても良いかも知れません。

    キャンセル

  • 2015/09/01 00: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も出力されなくなりました。

    キャンセル

  • 2015/09/01 01:08 編集

    お、また一歩進みましたね。
    紹介したサイトは、SELinuxが有効になっている場合の対処法なので、
    それで改善したなら、有効になっていると言うことです。

    トップページのHTMLが表示された際、アクセスログはどうなっていますか?

    それと、設定ですが、お伝えした内容でなく、
    ProxyPass /◯◯/websocket ws://localhost:8080/◯◯/websocket
    ProxyPassReverse /◯◯/websocket ws://localhost:8080/◯◯/websocket
    ProxyPass /◯◯/ ajp://localhost:8009/◯◯/
    と言うイメージで、wsの行をwebsocketの通信を必要とするパスに
    変える必要があるようです。

    キャンセル

  • 2015/09/01 01: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の通信を必要とするパスに
    >変える必要があるように思います。
    そうなのですね。
    その辺の設定もいまいちよくわからずにいました。
    ありがとう御座います。

    キャンセル

  • 2015/09/01 01:35

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

    キャンセル

  • 2015/09/01 02: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になってしまいました。

    キャンセル

  • 2015/09/01 07:34 編集

    可能性ですが、
    iptables –list
    したら、80番ポートを8080番ポートに変換するルールがあったりしませんか?
    一度、iptablesのサービスを落として、ブラウザからアクセスすると
    アクセスログはどうなるでしょうか?

    また、SELinuxの無効化ですが、
    http://rfs.jp/server/security/selinux01.html
    にあるような手順ですがその様にしましたか?

    少し気になるのですが、
    インスタンスの設定はGoUsamiさんが実施したわけでは無いのでしょうか?
    SELinuxを使っているなら、Apache用の設定が必要と思うので、
    それは把握されているはずと思うのですが。

    キャンセル

  • 2015/09/01 07:45

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

    キャンセル

  • 2015/09/01 11: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を停止させるとログインできなくなるようです。

    キャンセル

  • 2015/09/01 12:02 編集

    他の方が設定したということ、了解です。
    その方に聞けば分かるが、時間がかかる、ということでしょうか。

    SELinuxについても了解です。
    ひとまずは今の状態でも動くようなので、そのままでも良いと思います。

    iptablesをstopしたらApacheにつながるということは、
    iptablesで80番ポートから8080番ポートに転送しているということと思います。
    その設定を消しておけば、iptablesを有効にして、
    Webアプリが動くのではと思います。

    キャンセル

  • 2015/09/01 12:05

    http://qiita.com/kawaz/items/ed0030cb29c7d0497b63
    にあるような設定が入っていないでしょうか?

    キャンセル

  • 2015/09/01 14:29

    ありがとうございます。
    http://qiita.com/kawaz/items/ed0030cb29c7d0497b63
    にある設定が80ポートと8080番ポートの間でなされていたようです。

    それを解除することによって、
    通常の軌道に戻りました。

    あとは、httpd-proxy.confやhttp.confに設定を加えていけば大丈夫だと思います。
    長々とお付き合いいただきありがとうございました。

    キャンセル

  • 2015/09/01 15:33

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

    キャンセル

  • 2015/09/01 18:20

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

    キャンセル

  • 2015/09/01 18: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に関しては、記載されている通りに実行いたしました。

    キャンセル

0

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/08/26 23:10

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

    キャンセル

  • 2015/08/27 12:17

    ご回答ありがとうございます。
    サーバー側の開発言語はJavaでおこなっております。

    >何かエラー・ログが残っていませんかね?
    エラーログは出ていないように思います。

    キャンセル

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

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Apache

    1912questions

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

  • Tomcat

    577questions

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

  • WebSocket

    176questions

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