多個 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" />
workers.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。如果我嘗試訪問測試 tomcat URL,它會重定向到展示 tomcat URL。我嘗試訪問兩個 tomcat 的管理器,它們都指向展示 tomcat 管理器,如果我執行以下命令,那麼它會重定向到測試 tomcat 管理器。我想區分這兩個 tomcat 實例。我在這裡遺漏了一些東西。任何幫助,將不勝感激。
a2dissite 3_demo.conf
無法在任何地方找到任何合適的方法,所以在這裡問。請隨時提出建議-如何從頭開始。提前致謝。
您的伺服器配置包含重疊的虛擬主機。您的所有主機都已命名
Demo.Server
,並且它們都使用相同的 IP/埠定義。這樣,只有第一個被辨識,其餘的不被辨識。此外,您的問題包括 Tomcat 伺服器偵聽埠
8080
和8081
,這表明 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 實例上安裝的所有 Web 應用程序都可以在 上使用
https://www.tomcat1.com/<app_name>
,同樣,您在第二個 Tomcat 實例上的所有 Web 應用程序都可以在 上使用https://www.tomcat2.com/<app_name>
。使用 AJP 和 mod_jk
如果您想使用 AJP 進行連接,您有兩種選擇。第一個是mod_jk,就是你目前使用的,所以這大概就是你想要的。使用它,您可以將部署的 webapp 映射到它們相應的 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>
這樣,on 上的所有內容都將代理到文件中命名的 Tomcat 實例,而 on 上的所有內容都
demo.mydomain.com
將代理到名為. 您無需指定任何or即可使其正常工作。demo``workers.properties``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
是使用它,您可以將任何上下文映射到任何 URL。例如,要將/manager/
上下文映射到/the_great_manager/
,您可以使用以下配置:ProxyPass /the_great_manager/ ajp://localhost:8009/manager/ ProxyPassReverse /the_great_manager/ /manager/ ProxyPassReverseCookiePath /the_great_manager/ /manager/
這在某些情況下會派上用場,但是,如果您使用上述重定向,請準備好迎接驚喜。除非萬不得已,否則不要更改 URL 映射通常是個好主意。