我们正在尝试配置apache以将请求转发到托管不同应用程序服务器的不同服务器。
我们希望实现以下目标。
www.mydomain.com/server1 --->forward to ---> 172.30.34.50:8082 (AP1 jboss)
www.mydomain.com/server2 --->forward to ---> 172.30.34.51:8082 (AP2 jboss)
我们目前的配置:
mod_jk.conf:
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
的httpd.conf
JkMount /cliente1* ajp13unsecure
RewriteEngine on
RewriteLog logs/apache-mod_rewrite.log
RewriteLogLevel 3
RewriteRule ^/cliente1(/)?([^/]*)/?$ /$2 [L,PT] (tried w/o PT with no success)
问题是当mod_jk
转发请求时,会转到应用程序服务器,如下所示:172.30.34.50:8082/server1
哪个不是应用服务器中的有效资源,应该转到root(172.30.34.50:8082
)
我们尝试使用mod_rewrite
,但它在mod_jk
之前触发,因此当apache尝试匹配mod_jk
规则时,它不再满足条件。并且不会转发请求。
如何在mod_rewrite
转发之前让mod_jk
触发,以便应用服务器获得正确的URI。
或者有没有办法在没有上下文的情况下配置mod_jk
转发请求?
答案 0 :(得分:1)
我们怎样才能
mod_rewrite
在mod_jk
之前触发mod_jk
转发,以便应用程序服务器获得正确的URI。
我不太清楚为什么我注意到人们询问mod_proxy
的情况有所增加,但根据我的经验mod_proxy
效果更好&做你想做的事情更容易理解。
要在Apache中启用sudo a2enmod proxy proxy_http
,请执行以下操作:假设您使用的是Ubuntu / Debian:
sudo service apache2 restart
然后像这样重启Apache;再假设你在Ubuntu / Debian上:
# Settings for adding a trailing slash to the URL
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/(server1|server2)$
RewriteRule ^(.*)$ http://%{HTTP_HOST}$1/ [R=301,L]
# Settings for Apache Reverse Proxying
<IfModule mod_proxy.c>
# Proxy specific settings
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
AddDefaultCharset off
Order deny,allow
Allow from all
</Proxy>
ProxyPass /server1 http://172.30.34.50:8082/
ProxyPassReverse /server1 http://172.30.34.50:8082/
ProxyPass /server2 http://172.30.34.51:8082/
ProxyPassReverse /server2 http://172.30.34.51:8082/
</IfModule>
完成后,这是一个应该在Apache配置中运行的简单设置。根据您的设置对其进行处理:
mod_rewrite
初始/server1
设置为URL添加了一个尾部斜杠,我发现在路径片段类似/server2
和/server1
- 正在通过反向代理时需要执行此操作
另请注意,我设置了/server2
和/server1/
,但他们可能需要添加斜杠,例如/server2/
和此{{1}}。试验看什么效果最好。