現在、Tomcatインスタンスがあり、webapps
ファイルに3つのWAR
があるDebianX64サーバーがあります。また、1つのCMSシステムが実行されているApacheWebサーバーがあります。そして最後のプロジェクトの1つはMaintenance
webappです。これは、サーバーで作業していてサービスが利用できないときに表示されます。
私たちが直面している問題は次のとおりです。
私が長期的にやろうとしていること:
www.xyz.com
を呼び出している場合は、私たちが持っているXYZ
webappを呼び出す必要があります。同じwebapp名とドメイン名はまったく偶然です。Maintenance
webappをグリッド全体に結び付けます。これは、ドメインが稼働していないか、応答していないか、ビジー状態のときに呼び出されます。私は写真(恐ろしいもの.. : )を作成しました。これはタスクをもう少し説明的に説明しています。
---(
アーキテクチャがわかるように、ここに私の質問があります。
すべてのウェブアプリとウェブサーバーベースのウェブサイトのDNSにドメイン名が登録されていることに注意してください。
十分な情報を追加したと思います。何か必要なことがあれば、教えてください。どんな助けでもいいでしょう。どうもありがとう。 :-)
私は最終的にこの問題を次の設定に変更することで解決することができました:
Tomcatのserver.xml:
<Connector port="8080" proxyPort="80" redirectPort="443" protocol="HTTP/1.1" compression="force" compressionMinSize="1024"
connectionTimeout="20000" maxPostSize="5242880"
URIEncoding="utf-8"
compressableMimeType="text/html,text/xml,text/plain,text/css,text/ javascript,application/x-javascript,application/javascript"/>
<Connector port="443" protocol="org.Apache.coyote.http11.Http11NioProtocol" maxPostSize="5242880" SSLEnabled="true" maxThreads="200" compr$
compressionMinSize="1024" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS"
keystoreFile="keystore.jks" keystorePass="PASSWORD" URIEncoding="utf-8"
compressableMimeType="text/html,text/xml,text/plain,text/css,text/ javascript,application/x-javascript,application/javascript"/>
<Connector port="8010" protocol="AJP/1.3" redirectPort="80" URIEncoding="utf-8"
compressableMimeType="text/html,text/xml,text/plain,text/css,text/ javascript,application/x-javascript,application/javascript"
/>
<Engine name="Catalina" defaultHost="localhost" jvmRoute="Tomcat">
// Multiple webapps hosted
</Engine>
Jk.confにこれを追加しました:
<IfModule jk_module>
JkWorkersFile /PATH/to/workers.properties
JkLogFile /var/log/Apache2/mod_jk.log
JkLogLevel notice
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkOptions +ForwardURIProxy
JkMountFile /path/to/uriworkermap.properties
</IfModule>
worker.properties:
worker.list = worker_app1
worker.worker_app1.type = lb
worker.worker_app1.balance_workers = app1_instance1
worker.worker_app1.sticky_session = true
worker.worker_app1.sticky_session_force = false
worker.worker_app1.method = busyness
worker.app1_instance1.type = ajp13
worker.app1_instance1.Host = 127.0.0.1
worker.app1_instance1.port = 8010
worker.app1_instance1.Host = localhost
worker.app1_instance1.lbfactor = 1
worker.app1_instance1.socket_timeout = 40
worker.app1_instance1.socket_keepalive = true
worker.app1_instance1.reply_timeout = 30000
uriworkermap.properties:
/|/* = worker_app1;
これを000-default
のsites-enabled
に追加しました
// This is the Tomcat domain.
<VirtualHost *:80>
ServerName www.domain_Tomcat_webapp.de
ServerAlias domain_Tomcat_webapp.de
ProxyRequests on
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
<Location / >
Order allow,deny
Allow from all
</Location>
</VirtualHost>
以上です。次に、Tomcatを起動し、ApacheWebサーバーを再起動しました。これで動作します。
IPとサーバーが1つしかないことを考えると、次のようになります。
名前ベースの仮想ホスティングを使用してポート80にApacheリスニングのインスタンスを1つ配置します(IPは1つしかないため、HTTPSを使用する場合は、最終的なSSLの問題に注意してください。ここを確認してください: https://wiki.Apache.org/httpd/NameBasedSSLVHosts )
したがって、サブドメインごとに仮想ホストがあります。たとえば、ドメインがexample.comであるとすると、次のようになります。
www.app1.com
[...]
www.appN.com
cms.example.com
maintenance.example.com
アプリのサブドメインを管理する仮想ホストでは、必要に応じて、mod_jk、mod_proxy_ajp、またはmod_proxy_httpのいずれかを使用してリバースプロキシを構成できます。 Tomcatにはmod_jkを選択します。
これで、3つの問題をカバーできます。
これはあなたの最初の長期計画もカバーします、2番目のために:
メンテナンスWebアプリをグリッド全体に結び付けます。これは、ドメインが稼働していないか、応答していないか、ビジー状態のときに呼び出されます。
これはさまざまな方法で実行できます。たとえば、maintenace.example.comにリダイレクトするApache for 500/503errosのカスタムエラーページを使用します。これはそれ自身の問題である可能性があります
あなたの最後の質問に関して:
1これは良いアプローチですか?そうでない場合は、どこで何を改善できるかを教えてください。
私もこれをカバーしたと思います
2私がやろうとしているタスク、それは何と呼ばれていますか?グリッド構成、負荷分散?
仮想ホスティング(最終的な負荷分散を使用、後述)
3すべてのWebアプリ、異なるURLを介して参照できるが、正しいWebアプリまたはWebサイトを指すWebサイトを結び付ける方法。
これは、Apache仮想ホストとプロキシから処理されます。 URLでコンテキストパスを使用する必要がないように書き換えることもできます。これもそれ自体の問題である可能性があります。
4 Apache TomcatとLinuxの管理についてはよく理解していますが、ApacheWebサーバーについてはあまり理解していません。誰かがこの問題をどのように進めるか、いくつかの計画と私が必要とするものについて私を助けてくれるので、私はそれを実行することができます。
私もこれをカバーしたと思います。
ちなみに、私は少なくとも2つのトムキャットを使用しますが、アプリごとに2つのトムキャットを使用する方がよいでしょう。 Tomcatが死んだ場合に備えて、少なくとも2つはカバーされます。アプリごとに2つあるため、アプリを互いに分離することができます(異なるJVMで実行)。これは、問題が発生した場合に特定のアプリを指すのに非常に便利です。
お役に立てれば。