Назад | Перейти на главную страницу

Несколько Tomcat - сопоставление URL-адресов

Я установил несколько экземпляров tomcat в Ubuntu. Я хочу указать разные URL-адреса для каждого экземпляра tomcat. Но я не могу добиться желаемого результата в случае нескольких экземпляров 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. Если я пытаюсь получить доступ к URL-адресу test tomcat, он перенаправляется на URL-адрес демонстрационного tomcat. Я попытался получить доступ к диспетчеру обоих котов, и оба они указывают на демо-менеджер Tomcat, если я сделаю команду ниже, он перенаправит на тестовый менеджер tomcat. Я хочу различать оба экземпляра tomcat. Мне что-то здесь не хватает. Любая помощь будет оценена.

a2dissite 3_demo.conf

Ничего не могу найти нигде, поэтому спросил здесь. Не стесняйтесь предлагать- Как это сделать с нуля. Заранее спасибо.

Конфигурация вашего сервера содержит перекрывающиеся виртуальные хосты. Все ваши хозяева названы Demo.Server и все они используют одно и то же определение IP / порта. Таким образом распознается только первый, остальные - нет.

Кроме того, ваш вопрос включает серверы Tomcat, прослушивающие порты 8080 и 8081, которые предлагают HTTP, но у вас настроен Jk, который используется для AJP.

Предполагая, что вы используете 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 будут доступны по адресу https://www.tomcat1.com/<app_name>, и аналогично все ваши веб-приложения на втором экземпляре Tomcat доступны по адресу https://www.tomcat2.com/<app_name>.

Использование AJP и mod_jk

Если вы хотите использовать AJP для соединений, у вас есть два варианта. Первый - это mod_jk, то, что вы используете в настоящее время, так что это, вероятно, то, что вам нужно. Используя это, вы можете сопоставить развернутые веб-приложения с их соответствующими URL-адресами, но не можете изменить URL-адреса, то есть вы не можете сделать сопоставление, чтобы http://yourserver/thefrontend/ приведет к тому, что веб-приложение будет установлено в /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 с именем demo в workers.properties файл и все на test.mydomain.com будет проксирован на экземпляр с именем test. Вам не нужно указывать Directory или Alias для того, чтобы это работало.

Использование AJP и proxy_ajp

Другой разъем AJP, который вы можете использовать, это proxy_ajp. Поскольку вы уже настроили mod_jk, Я думаю, что вряд ли вы захотите использовать это вместо этого, но я записываю это для полноты картины.

Модуль Apache прокси AJP не нуждается в дополнительных файлах свойств, вы должны включить 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-адресов без крайней необходимости.