Ubuntuに複数のTomcatインスタンスをインストールしました。 Tomcatインスタンスごとに異なるURLを指定したい。しかし、Tomcatインスタンスが複数ある場合、望ましい結果を得ることができません。
(以下のURLは私がやろうとしていることを説明するためのものです)
Tomcat1:demo.mydomain.com/myapp:localhost:8080/myapp
Tomcat2:test.mydomain.com/myotherapp:localhost:8081/myotherapp
さらに検索した後の構成ファイルの変更:AJPポートを介してそれを達成しようとしています。だから私は自分のファイルで以下の編集をしました:
Tomcat1 =デモ
Tomcat2 =テスト
デモ-server.xml
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
test-server.xml
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
worker.properties
worker.list=jk-status,demo,test
# Status worker for managing load balancer
worker.jk-status.type=status # setting type of jk-status' worker.
worker.demo.port=8009
worker.demo.Host=localhost
worker.demo.type=ajp13
worker.test.port=8010
worker.test.Host=localhost
worker.test.type=ajp13
/ etc/Apache2/sites-enabledで有効になっているサイト
1_rewritehttp.conf
<VirtualHost *:80>
ServerName server
RewriteEngine On
RewriteRule (.*) http://server.mydomain.com%{REQUEST_URI}
</VirtualHost>
<VirtualHost *:80>
ServerName server.mydomain.com
ServerAdmin webmaster@localhost
DocumentRoot /opt/www/
JkMount /jolokia-demo/* demo
JkMount /jolokia-test/* test
<Directory /opt/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
ErrorLog ${Apache_LOG_DIR}/error.log
CustomLog ${Apache_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName demo
RewriteEngine On
RewriteRule (.*) https://demo.mydomain.com%{REQUEST_URI}
</VirtualHost>
<VirtualHost *:80>
ServerName demo.mydomain.com
RewriteEngine On
RewriteRule (.*) https://demo.mydomain.com%{REQUEST_URI}
</VirtualHost>
<VirtualHost *:80>
ServerName test
RewriteEngine On
RewriteRule (.*) https://test.mydomain.com%{REQUEST_URI}
</VirtualHost>
<VirtualHost *:80>
ServerName test.mydomain.com
RewriteEngine On
RewriteRule (.*) https://test.mydomain.com%{REQUEST_URI}
</VirtualHost>
3_demo.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName server.mydomain.com
DocumentRoot /opt/www/
<Directory /opt/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
JkMount /myapp/* demo
Alias /myapp/ "/opt/Tomcat/demo/webapps/myapp/"
<Directory /opt/Tomcat/demo/webapps/myapp/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
JkMount /manager/* demo
ErrorLog ${Apache_LOG_DIR}/demo_error.log
CustomLog ${Apache_LOG_DIR}/demo_access.log combined
SSLEngine on
SSLCertificateFile /usr/local/ssl/crt/public.cer
SSLCertificateKeyFile /usr/local/ssl/private/private.key
SSLCertificateChainFile /usr/local/ssl/crt/intermediate.cer
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
# MSIE 7 and newer should be able to use keepalive
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>
4_test.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName server.mydomain.com
DocumentRoot /opt/www/
<Directory /opt/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
JkMount /myotherapp/* test
Alias /myotherapp/ "/opt/Tomcat/test/webapps/myotherapp/"
<Directory /opt/Tomcat/test/webapps/myotherapp/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
JkMount /manager/* test
ErrorLog ${Apache_LOG_DIR}/test_error.log
CustomLog ${Apache_LOG_DIR}/test_access.log combined
SSLEngine on
SSLCertificateFile /usr/local/ssl/crt/public.cer
SSLCertificateKeyFile /usr/local/ssl/private/private.key
SSLCertificateChainFile /usr/local/ssl/crt/intermediate.cer
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
# MSIE 7 and newer should be able to use keepalive
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>
さて、問題は、URLを介してデモTomcatにアクセスできることです。テスト用のTomcatURLにアクセスしようとすると、デモ用のTomcatURLにリダイレクトされます。両方のTomcatのマネージャーにアクセスしようとしましたが、どちらもデモのTomcatマネージャーを指しています。以下のコマンドを実行すると、Tomcatマネージャーのテストにリダイレクトされます。両方のTomcatインスタンスを区別したいと思います。ここで何かが足りません。どんな助けでもいただければ幸いです。
a2dissite 3_demo.conf
どこにも適切な方法を見つけることができないので、ここで尋ねました。お気軽にご提案ください-ゼロからそれを行う方法。前もって感謝します。
サーバー構成に重複する仮想ホストが含まれています。すべてのホストにはDemo.Server
という名前が付けられ、すべてのホストが同じIP /ポート定義を使用します。このように、最初のものだけが認識され、残りは認識されません。
また、質問には、HTTPを提案するポート8080
および8081
をリッスンしているTomcatサーバーが含まれていますが、AJPに使用されるJkが構成されています。
HTTPを使用していると仮定すると、次のApache構成で目標を達成できます(この場合はmod_jk
は必要ありません)。
<VirtualHost *:443>
ServerName www.Tomcat1.com
ProxyPass / http://localhost:8080/
SSLCertificateFile /certfiicate/for/server1.pem
</VirtualHost>
<VirtualHost *:443>
ServerName www.Tomcat2.com
ProxyPass / http://localhost:8081/
SSLCertificateFile /certfiicate/for/server2.pem
</VirtualHost>
このように、最初のTomcatインスタンスにインストールされているすべてのWebアプリはhttps://www.Tomcat1.com/<app_name>
で利用でき、同様に、2番目のTomcatインスタンスにインストールされているすべてのWebアプリはhttps://www.Tomcat2.com/<app_name>
で利用できます。
AJPとmod_jkを使用
接続にAJPを使用する場合は、2つのオプションがあります。 1つ目は現在使用しているmod_jkなので、おそらくこれが必要です。これを使用して、デプロイされたWebアプリを対応するURLにマッピングできますが、URLを変更することはできません。つまり、http://yourserver/thefrontend/
が/thebackend
コンテキストにインストールされたWebアプリにつながるようにマッピングを行うことはできません。
Mod_jkを使用するには、次のApache構成を使用する必要があります(workers.properties
ファイルは問題ないようです)。
<VirtualHost *:443>
ServerName demo.mydomain.com
JkMount /* demo
SSLCertificateFile /certfiicate/for/server1.pem
</VirtualHost>
<VirtualHost *:443>
ServerName test.mydomain.com
JkMount /* test
SSLCertificateFile /certfiicate/for/server1.pem
</VirtualHost>
このようにして、demo.mydomain.com
上のすべてがworkers.properties
ファイル内のdemo
という名前のTomcatインスタンスにプロキシされ、test.mydomain.com
上のすべてがtest
という名前のインスタンスにプロキシされます。これを機能させるために、Directory
またはAlias
を指定する必要はありません。
AJPとproxy_ajpを使用
使用できる他のAJPコネクタはproxy_ajp
です。すでにmod_jk
を設定しているので、代わりにこれを使用する可能性は低いと思いますが、完全を期すために書き留めておきます。
AJPプロキシApacheモジュールは追加のプロパティファイルを必要としません。設定にバックエンドIP(または名前)を含める必要があります。構成は次のようになります。
<VirtualHost *:443>
ServerName demo.mydomain.com
ProxyPass / ajp://localhost:8009/
SSLCertificateFile /certfiicate/for/server1.pem
</VirtualHost>
<VirtualHost *:443>
ServerName test.mydomain.com
ProxyPass / ajp://localhost:8010/
SSLCertificateFile /certfiicate/for/server1.pem
</VirtualHost>
proxy_ajp
の利点の1つは、これを使用して、任意のコンテキストを任意のURLにマップできることです。たとえば、/manager/
コンテキストを/the_great_manager/
にマップするには、次の設定を使用できます。
ProxyPass /the_great_manager/ ajp://localhost:8009/manager/
ProxyPassReverse /the_great_manager/ /manager/
ProxyPassReverseCookiePath /the_great_manager/ /manager/
これは特定の状況で役立ちますが、上記のようなリダイレクトを使用する場合は、驚きに備えてください。どうしても必要な場合を除いて、通常はURLマッピングを変更しないことをお勧めします。