web-dev-qa-db-ja.com

デプロイされたフォルダー名を追加せずにサイトに入ることができるように、Tomcatでコンテキストパスを設定するにはどうすればよいですか?

私はTomcatガイドでこれについて読んだ ここ そしていくつかのSO質問。そして私はほとんど同じことをしていると思う。しかし、何らかの方法で成功することができない。

まず第一に、私のアプリケーションは、私が制御できない共有Tomcatサーバーにデプロイされていると言わなければなりません。 。warファイルをドロップするだけで、デプロイされます。

アプリケーションをROOT.warとしてパッケージ化しようとしましたが、機能しませんでした。管理者は私が望む名前としてそれをパッケージ化するように私に言いました、そして彼らはそれを世話するでしょう。 my-application.warとしてパッケージ化し、デプロイされましたが、-と入力する必要があります。 http:// my-Host/my-applicationWebサイトにアクセスします。

管理者に連絡した後、Tomcat設定ファイルのホストに次のようなコンテキスト要素を配置したと言われました。

<Context path="" docBase="path of my-application deployed folder"/>

これは、my-applicationmy-Hostに送信されるすべてのリクエストのデフォルトアプリケーションとして設定することになっています。しかし、そうではなく、http:// my-Hostと入力するたびに次のようになります。

HTTP Status 404 - / The requested resource (/) is not available

しかし、もう一度http:// my-Host/my-applicationと入力すると、すべて正常に機能します。何が間違っているのかについての提案は間違いなくありがたいです。

更新:
Tomcatのドキュメントに記載されている手順を実行しようとしました アプリケーションをデフォルトにする方法 。 3つの方法が説明されており、3つの方法すべてを試し、ローカルホストにROOTとしてアプリケーションを正常にデプロイできました。

また、リモートサーバーで直面している問題を再現して、理由を見つけて管理者に報告できるようにしました。いくつか問題があります。

  1. 管理者が送ってくれたserver.xmlフラグメントにautoDeploydeployOnStartUpが設定されていますtrueに設定しますが、server.xmlでContext要素を明示的に定義する場合はfalseにする必要があります。これにより、二重展開が発生し、ROOTフォルダーと.warファイルの名前のフォルダーが作成されます。 .warを削除すると、対応するフォルダーが削除され、アプリケーションがアンデプロイされますが、ROOTは残り、手動で削除する必要があり、Tomcatを再起動する必要があります。再起動するまで、ROOT.warのデプロイメントは失敗します。
  2. ROOT.warの展開を妨げるいくつかの理由があると思いました。 ROOT.xmlconf/{engine-name}/{Hostに存在する可能性があります-name}またはROOTフォルダーがホストのappBaseに存在するか、上記で説明したように、以前のデプロイメントのROOTアプリケーションはアンデプロイされず、Tomcatを再起動する必要があります。

いずれにせよ、上記のケースをチェックするためにTomcatログファイルとconfファイルにアクセスする必要があるため、ROOT.warのデプロイを正確に妨げている原因を正確に特定することはできませんでした。

また、すべてのことから、管理者はTomcatサーバーを保守して問題を見つけることができないようです。そこで、共有サーバーと格闘した後、専用のTomcatサーバーを使用することにしました。

11
doctrey

あなたの質問では、管理者がコンテキストを次のように設定したと述べています。

<Context path="" docBase="path of my-application deployed folder"/>

上記のコメントに基づいて、絶対パスではなく、アプリケーションの相対パスを使用することをお勧めします。

私はTomcatサーバーでこれを試しました:

<Context path="/" docBase="my-application/" />

そしてそれはトリックをしました。

Context要素を含むHost要素は、実際には、コンテキストにも影響を与える可能性のあるいくつかのパラメーターを設定します。これがデフォルト設定の場合、相対コンテキストは単にwebappsフォルダーを指している必要があります。変更された場合、結果が異なる場合があります。

5
Jeff Goldberg

通常、これは次の手順で実行できます。

  • Conf/Catalina/localhostにROOT.xmlコンテキストファイルを定義します
  • WebアプリにWARに「ROOT.war」という名前を付けるか、フォルダを「ROOT」に含めます

ただし、共有Tomcatインスタンスでそれを実行できるとは思えません。デフォルトのアプリケーションとして実行できるアプリケーションは1つだけです。ホスティング会社はおそらくそれを許可しないでしょう。そうでなければ、同じTomcatインスタンスを共有する多くの人々のうち、どのアプリケーションをデフォルトにすることができますか?

このリンクを参照してください: http://staraphd.blogspot.com/2009/10/change-default-root-folder-in-Tomcat.html

4
ziggy

Tomcat Wikiには、アプリケーションをデフォルトのコンテキストに配置することに関する section があります。ただし、これを行うには、説明する共有コンテキストでは不可能な、Tomcatサーバーの制御を意味します。

サーバーに他のシステムをインストールする機能がある場合、1つの代替ソリューションは、NGINXなどのプロキシサーバーを使用することです。これは、単にwarファイルにROOT.warという名前を付けるよりもはるかに複雑ですが、それが唯一のオプションである場合もあります。

サーバーでNGINXをリッスンしていて、独自のURLがある場合は、次のような設定で HttpProxyModule を使用します。

server {
        listen          80;
        server_name     my.domain.com;
        location / {
            proxy_pass              http://my-Host/my-application;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header        Host $http_Host;
        }
    }

また、これを機能させるには、「my.domain.com」のURLを所有している必要があり、とは別にする必要があります。誰もが共有Tomcatサーバーに使用しているもの。

ソリューションのnginx部分は無料ですが、新しいURLを登録してから、no-ip.comなどを使用してTomcatサーバーにリダイレクトする必要がある場合は、費用がかかります。

3
Jeff Goldberg