QA@IT

eclipseのjavaプロジェクトをインターネットにアップしたい

5872 PV

お世話になります。
お名前.comのVPS(KVM)を使って、
eclipseのjavaプロジェクトをインターネットにアップしたいと試みています。

環境
お名前.comのVPS(KVM) CentOS 6.5
Windows7 64bit
SSH接続
TeraTerm 4.88

jdk-8u65-linux-x64.rpm
apache-tomcat-7.0.65.tar.gz
Apache yum -y install httpd
mysql57-community-release-el6-7.noarch.rpm

Tomcatのwebappsフォルダに
Eclipseで作ったプロジェクトをエクスポートしたファイル(BookCenter.war)を
TeraTermのメニューから「ファイル」→「SSH SCP」でデプロイする

「Tomcat server.xml」

<!--
        <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
 -->
        <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <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" />
        <Context path="/BookCenter" docBase="BookCenter" debug="0" reloadable="true">

        </Context>
</Host>

「Apache httpd.conf」

LoadModule proxy_module modules/mod_proxy.so            →アンコメント
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so    →アンコメント

「httpd-proxy.conf」

<Location /BookCenter/>
ProxyPass ajp://hoge.com:8009/BookCenter/
</Location>

「システムの起動」
起動時はtomcat -> apacheの順
停止時は逆にapache -> tomcatの順に停止
したがって
apache停止→tomcat停止→MySQL停止→MySQL起動→tomcat起動→apache起動

現状はhttp://hoge.com/BookCenter/のURLを叩いてみても、
「リンクエラー」が出るだけです。
どなたか、お知恵をお貸し下さい。

  • 1.「コメントアウト」は「アンコメント」の間違いですよね?2.「リンクエラー」は具体的にはどこにどう出るのですか?3.apacheとtomcatのログはどうなっていますか? -
  • blunder3さんコメント有難うございます。確かに、アンコメントの間違いです。失礼致しました。
    リンクエラーはhttp://hoge.com/BookCenter/とアドレスにURLを叩くと、画面左中央に
    「nternet Explorer では java-eclipse.biz が見つかりませんでした」と表示されます。
    -
  • apacheのログに以下が記載されています。
    [Sun Nov 15 03:26:01 2015] [notice] SIGHUP received. Attempting to restart
    tomcatのログはありませんでした。
    -
  • ひとつ前のコメント訂正します。
    リンクエラーはhttp://hoge.com/BookCenter/とアドレスにURLを叩くと、画面左中央に
    「nternet Explorer では hoge com が見つかりませんでした」と表示されます
    -
  • nslookup hoge.com(コマンドプロンプトにて実行)でIPアドレスは取得できるのでしょうか?
    -
  • コマンドプロンプトを管理者権限で実行しますと
    nslookup hoge.com
    サーバー: UnKnown
    Address: 2404:1a8:7f01:b::3
    *** UnKnownが hoge.comのアドレスが見つかりません:Query refused
    となってしまいます。
    -
  • たぶんapacheのデフォルトだとIPアドレスでもアクセスできるんじゃないかと思います。VPSのIPアドレス(IPv4アドレスです、念のため)がx.x.x.xだとして、http://x.x.x.x/BookCenter/を叩いてみるとどうなりますか?
    -
  • blunder3さんお返事遅れました。すみません。
    http://x.x.x.x/BookCenter/を叩いてみたんですが、
    「Internet Explorer では 133.130.67.154 に接続できませんでした」
    と表示されてしまいます。
    -
  • 「SSH接続」はできているわけですよね?であればhttp接続ができない原因を切り分けて対処すればよいかと思います。例えばSSH接続したサーバ側でwgetやcurlでlocalhostに接続してみてOKなら、外部から接続できない問題なので、iptablesを疑ってみる(ポート80を許可しているか?)とかです。
    -
  • TeraTermでroot権限でwget -S http://localhostを実行しましたが、接続出来ていました。http://www.karakaram.com/onamae-com-vps2-iptablesを参考にして、ptablesの設定に致しましたがhttp://x.x.x.x/BookCenter/を叩いてみてもInternet Explorerではx.x.x.xに接続できません。 -
  • サーバ側ですが、wget http://localhost/BookCenter/もOKでしょうか?サーバ側でローカルにOKなら、問題点はクライアント側か経路上にありそうです。あとhttpd-proxy.confの設定ですけど、ajp://hoge.com:8009/BookCenter/が通るかどうか不明なので、ajp://localhost:8009/BookCenter/にしてみるとか。 -
  • wget http://localhost/BookCenter/を叩いても
    HTTP request sent, awaiting response... 404 Not Found
    2015-11-21 15:43:47 ERROR 404: Not Found.となります。
    -
  • httpd-proxy.confの設定を変えてajp://localhost:8009/BookCenter/を叩くと以下になります。
    「デバイスまたはリソース(localhost)は、ポート"World Wide Webサービス(HTTP)"で接続を受けるように設定されていません。」
    -
  • それってIEのネットワーク診断結果ですよね。単なる想像でいえば、例えばサーバからHTTP応答でlocalhostへのリダイレクトが返ってくればそのエラーになるかもしれません。が、実際はそれだけでは分かりません。クライアント側でもwgetかcurlを使ってHTTP応答を表示させるか、IEのF12機能を使って応答を見るとか。サーバのログも見た方がよいです。
    -
  • あとサーバ側でwget http://localhost/BookCenter/がエラーになるのなら、ローカルでNGなので、リモートからNGになるのは当然かと思います。リモート接続のほうが障害ポイントが多く、切り分けが難しくなるわけですから、まずローカルでOKにしてからリモートを考えた方がよいと思います。 -
  • 以下のサイトを参考にして設定をやり直しましたが表示しませんでした。
    http://www.server-world.info/query?os=CentOS_6&p=httpd
    http://www.matsuaz.com/matsumotojs/2011/02
    http://www.karakaram.com/onamae-com-vps2-iptable
    -
  • すみません。色々試行錯誤していたら、TomcatがStopしなくなりました。
    エラーは「pid file found but no matching process was found. stop aborted」です。
    googleで検索して色々試したのですがなおりません。
    何か解決策がありましたら、ご教授下さい。
    -
  • Tomcatを強制終了したいときはコマンドラインからkill -KILL <pid>もしくはkill -9 <pid>を実行して下さい(<pid>はTomcatのプロセスIDに置き換える)。
    -
  • ただエラーメッセージからすると、Tomcatプロセスは既にいなくなっていて、/var/run/tomcat.pid等のpidファイルがうまく消えずに残っているだけの可能性もあるので、プロセスが存在しないならpidファイルを消せばよいと思います。
    -

回答

まずはTomcatのインストールおよびhttpdとの連携ができているかどうかを確認してみたらどうでしょうか?

準備

  • Tomcatはダウンロードしたapache-tomcat-7.0.65.tar.gzを解凍する
  • 設定はいじらない(server.xml等はいじらない)
  • BookCenterはまだ入れない(webappsの下はいじらない)
  • httpdはdiehardneverさんの設定と同じでよいが、テスト用にhttpd-proxy.confを少し変える(/を使用する)

httpd-proxy.conf(テスト用)

<Location />
ProxyPass ajp://hoge.com:8009/
</Location>

テスト(サーバ側)

  • まずTomcatを起動
  • サーバ側にてcurl -i http://localhost:8080/でTomcatのCongratulations画面がTomcatから直に返ってくることを確認
  • -iでヘッダが表示されるが、Tomcatの場合はServer: Apache-Coyote/1.1があるのでTomcatからとわかる
  • 次にhttpdを起動
  • サーバ側にてcurl -i http://localhost/でTomcatのCongratulations画面がhttpd経由で返ってくることを確認
  • サーバ側でのローカルな確認がOKだったら、これ以降の確認はクライアント側からリモートで行う

テスト(クライアント側)

  • IE等からhttp://hoge.com/にアクセスし、TomcatのCongratulations画面を表示
  • hoge.comのDNSルックアップがNGなら、IPアドレスでhttp://x.x.x.x/を試す(ただしDNS関係は後で直すこと)
  • 画面が表示されたら、一番上のメニューの中のExamplesをクリックし、Servlets examplesJSP Examplesを試す
  • 一通り試してOKなら、元の画面に戻り、猫の絵の右端の方にあるServer Status / Manager App / Host Managerを試す(401 Unauthorizedエラーになるはず)
  • tomcat-usrers.xmlの設定を行ってから、Tomcatを再起動し、再度Server Status / Manager App / Host Managerを試し、期待する結果が得られることを確認する

この辺が一通りできてから、BookCenterをデプロイすればうまく行くことが期待できると思います。それでもNGなら、BookCenterの中身の問題かもしれないです。

あと関係あるかどうか分かりませんが、注意点が一つあります。リバースプロキシの設定ではProxyPassだけでなく、リダイレクトへの対応のためProxyPassReverseが必要なケースがあります。たぶん関係なさそうな気がしますが、念のため。

httpd-proxy.conf

<Location /BookCenter/>
ProxyPass ajp://hoge.com:8009/BookCenter/
ProxyPassReverse ajp://hoge.com:8009/BookCenter/
</Location>

追記

いい忘れてましたが、もしやっていないようでしたら、サーバのhostsファイルに自ホストを設定しておいて下さい。

/etc/hosts

x.x.x.x    hoge.com                          # x.x.x.xは実IPアドレス、hoge.comは実ドメイン名に置き換える
編集 履歴 (1)
  • blunder3さん、ご丁寧にご回答有難うございます。
    まだ、TomcatのプロセスIDがわからないところで困っています。従ってTomcatの強制終了さえ出来ていません。
    頂いたコメントを元にサーバーを構築しなおしてみます。時間かかるかもしれませんが、
    宜しくお願い致します。
    -
  • blunder3さん、大変お恥ずかしいご報告があります。
    お名前.comさんのネームサーバーのDNSレコード設定が間違っておりました。
    なので、今DNSレコード設定を変更してネームサーバーも変更しましたので、
    72時間後あたりに反映いたします。再度1からやり直しますので、しばらくお待ち下さい。申し訳ありません。
    -
  • テスト(サーバ側)は成功致しました。しかしテスト(クライアント側)でIEからhttp://hoge.com/にアクセスしましたがTomcatのCongratulations画面を表示されません。
    ちなみにhttp://kajuhome.com/apache.shtmlのサイトを参考にApache起動しましたがクライアントよりhttp://hoge.comでアクセスしてもApache画面がでません
    -
  • blunder3さん、お世話になっております。Tomcatもapacheの画面も出せなくて、お手上げになっております。ちなみにtomcat-connectorといものはインストールしなければ、apacheとtomcatは連携しないのでしょうか。何卒宜しくお願い致します。 -
  • nslookup hoge.comでhoge.comのIPアドレスは返ってくるようになりましたか?tomcat-connectorを使う場合も多いですが、diehardneverさんの構成では不要です。
    -
  • nslookup hoge.comでIPアドレスは返ってこないのです。
    また、http://www.cman.jp/network/support/port.htmlのサイトで
    hoge.comのport80のportチェックを実行すると
    結果は「ホスト:hoge.comポート:80にアクセスできませんでした」となります。
    これは、まだお名前.comの設定に問題があるのでしょうか。
    -
  • 恐らくホスト名(例えばwwwなど)の有無でhoge.comとwww.hoge.comと両方あるんですよね?hoge.comの設定ミスかもしれないので、www.hoge.comの方はどうですか?あとクライアント側のDNSレゾルバの設定は要確認(当初DNSサーバがIPv6アドレスになっていたけど、いいのかな?)。 -
  • blunder3さん、お世話になっております。DNSレコード設定にwww.hoge.comを加えてネームサーバーも変更しました。しばらくして反映すると思われます。
    /etc/resolv.confでDNSレゾルバの設定にhoge.comを書き込みました。
    -
  • blunder3さん、またnslookup hoge.comのコマンドに対してはIPアドレスを返してくれるようになりました。後はiptablesの設定にport80を開くように命令を加えました。
    結果IEからhttp://hoge.com/を叩くと「Service Temporarily Unavailable」となりましたので、
    もう少し時間を待てば良いかもしれません。追ってご報告致します。
    -
  • blunder3さん、お世話になっております。DNSレコード設定、ネームサーバーも変更後、インターネットに反映されたましてTomcatのCongratulations画面が表示されました。 -
  • tomcat-users.xmlの設定変更したところ「Servlets examples」「JSP Examples」「Server Status」
    「Manager App」「Host Manager」全て表示されました。
    これからBookCenterをデプロイ致します。追ってご報告致します。有難うございます。
    -
  • blunder3さん、お世話になっております。
    長くなりますので、回答を起こして、そこに記載致します。
    何卒ご高覧下さい。
    -
  • blunder3さん、お世話になりました。
    ROOT.warではなくBookCenter.warをデプロイして
    Context path="" docBase="/usr/local/tomcat/webapps/BookCenter" debug="0" reloadble="true"></Context>としたところIEで表示致しました。長々とお付き合い有難うございました。感謝致します。
    -

BookCenter.warをROOT.warと名前を変えてデプロイしたところ、
IEで表示すると「404」になってしまいます。
そこで、気になる設定を記載致しますのでご指摘戴ければと思います。
ちなみにEclipse上でローカル環境でのweb.xmlでもwelcome fileは「baseLayout/catalog」になっています。

tomcat/server.xml
<?xml version='1.0' encoding='utf-8'?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with

      http://www.apache.org/licenses/LICENSE-2.0
-->
<!-- Note:  A "Server" is not itself a "Container", so you may not
     define subcomponents such as "Valves" at this level.
     Documentation at /docs/config/server.html
 -->
<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <!-- Security listener. Documentation at /docs/config/listeners.html
  <Listener className="org.apache.catalina.security.SecurityListener" />
  -->
  <!--APR library loader. Documentation at /docs/apr.html -->
  <Listener className="org.apache.catalina.core.JasperListener" />
  <!-- Prevent memory leaks due to use of particular java/javax APIs-->

  <!-- Global JNDI resources
       Documentation at /docs/jndi-resources-howto.html
  -->
  <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <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>

  <!-- A "Service" is a collection of one or more "Connectors" that share
       a single "Container" Note:  A "Service" is not itself a "Container",
       so you may not define subcomponents such as "Valves" at this level.
       Documentation at /docs/config/service.html
   -->
  <Service name="Catalina">

    <!--
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="4"/>
    -->


    <!-- A "Connector" represents an endpoint by which requests are received
         and responses are returned. Documentation at :
         Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
         Java AJP  Connector: /docs/config/ajp.html
         APR (HTTP/AJP) Connector: /docs/apr.html
         Define a non-SSL HTTP/1.1 Connector on port 8080
    -->
    <!--
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    -->
    <!-- A "Connector" using the shared thread pool-->
    <!--
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    -->
    <!-- Define a SSL HTTP/1.1 Connector on port 8443
         This connector uses the BIO implementation that requires the JSSE
         style configuration. When using the APR/native implementation, the
         OpenSSL style configuration is required as described in the APR/native
         documentation -->
    <!--
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />
    -->

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />


    <!-- An Engine represents the entry point (within Catalina) that processes
         every request.  The Engine implementation for Tomcat stand alone
         analyzes the HTTP headers included with the request, and passes them
         on to the appropriate Host (virtual host).
         Documentation at /docs/config/engine.html -->

    <!-- You should set jvmRoute to support load-balancing via AJP ie :
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
    -->
    <Engine name="Catalina" defaultHost="hoge.com">

      <!--For clustering, please take a look at documentation at:
          /docs/cluster-howto.html  (simple how to)
          /docs/config/cluster.html (reference documentation) -->
      <!--
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
      -->

      <!-- Use the LockOutRealm to prevent attempts to guess user passwords
           via a brute-force attack -->
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <!-- This Realm uses the UserDatabase configured in the global JNDI
             resources under the key "UserDatabase".  Any edits
             that are performed against this UserDatabase are immediately
             available for use by the Realm.  -->
       <!-- <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>-->
       <Realm className="org.apache.catalina.realm.JDBCRealm"
             driverName="com.mysql.jdbc.Driver"
             connectionPassword="adminpass"
             userTable="manager"
             userRoleTable="roles"
             roleNameCol="role"
       />
      </Realm>

      <Host name="hoge.com"  appBase="/usr/local/tomcat/webapps/"
            unpackWARs="true" autoDeploy="true">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->
        <Alias>hoge.com</Alias>
        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <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" />
        <Context path="/ROOT" docBase="/usr/local/tomcat/webapps/" debug="0" reloadble="true"></Context>
      </Host>
    </Engine>
  </Service>
</Server>

「tomcat/web.xml最終項目」

<welcome-file-list>
        <welcome-file>baseLayout/catalog</welcome-file>
    </welcome-file-list>
    <session-config>
        <session-timeout>1</session-timeout>
    </session-config>
編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。