多个 Tomcat - URL 映射

多个 Tomcat - URL 映射

我在 Ubuntu 中安装了多个 tomcat 实例。我想为每个 tomcat 实例指定不同的 URL。但如果有多个 tomcat 实例,我无法实现所需的结果。

(以下 URL 仅用于解释我正在做的事情)

Tomcat1:demo.mydomain.com/myapp:localhost:8080/myapp

Tomcat2:test.mydomain.com/myotherapp:本地主机:8081/myotherapp

进一步搜索后修改我的配置文件:我正尝试通过 AJP 端口实现它。因此,我在文件中进行了以下编辑:

Tomcat1 = 演示

Tomcat2 = 测试

演示 - server.xml

 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

测试-server.xml

 <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />

工人.属性

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_测试.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。如果我尝试访问测试 tomcat URL,它会重定向到演示 tomcat URL。我尝试访问两个 tomcat 的管理器,它们都指向演示 tomcat 管理器,如果我执行以下命令,它会重定向到测试 tomcat 管理器。我想区分两个 tomcat 实例。我这里遗漏了一些东西。任何帮助都将不胜感激。

a2dissite 3_demo.conf

找不到任何合适的方法,所以在这里问。请随意建议 - 如何从头开始。提前致谢。

答案1

您的服务器配置包含重叠的虚拟主机。您的所有主机都已命名,Demo.Server并且都使用相同的 IP/端口定义。这样,只有第一个主机被识别,其余的则不会被识别。

此外,您的问题包括 Tomcat 服务器监听端口80808081,这建议使用 HTTP,但您已配置 Jk,它用于 AJP。

mod_jk假设您使用 HTTP,您可以使用以下 Apache 配置实现您的目标(在这种情况下您不需要):

<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 实例上安装的所有 webapps 都可在 上使用https://www.tomcat1.com/<app_name>,同样,第二个 Tomcat 实例上安装的所有 webapps 都可在 上使用https://www.tomcat2.com/<app_name>

使用 AJP 和 mod_jk

如果您想使用 AJP 进行连接,您有两个选择。第一个是 mod_jk,您目前使用的,所以这可能是您想要的。使用这个,您可以将部署的 webapps 映射到它们相应的 URL,但不能更改 URL,即您不能进行映射,这样http://yourserver/thefrontend/会导致 webapp 安装在/thebackend上下文中。

使用 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指定的 Tomcat 实例, 上的所有内容都将被代理到名为 的实例。 您无需指定任何或即可使其正常工作。demoworkers.propertiestest.mydomain.comtestDirectoryAlias

使用 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是,使用它,您可以将任何上下文映射到任何 URL。例如,要将上下文映射/manager//the_great_manager/,您可以使用以下配置:

ProxyPass /the_great_manager/ ajp://localhost:8009/manager/
ProxyPassReverse /the_great_manager/ /manager/
ProxyPassReverseCookiePath /the_great_manager/ /manager/

这在某些情况下很有用,但是,如果您使用上述重定向,请做好应对意外的准备。除非绝对必要,否则通常最好不要更改 URL 映射。

相关内容