web-dev-qa-db-ja.com

複数のTomcat-URLマッピング

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

どこにも適切な方法を見つけることができないので、ここで尋ねました。お気軽にご提案ください-ゼロからそれを行う方法。前もって感謝します。

1
Kuldeep Chandel

サーバー構成に重複する仮想ホストが含まれています。すべてのホストには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マッピングを変更しないことをお勧めします。

2
Lacek