带有前缀的mod_jk和mod_rewrite

时间:2014-05-30 03:27:27

标签: apache mod-rewrite forward mod-jk

我们正在尝试配置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转发请求?

1 个答案:

答案 0 :(得分:1)

  

我们怎样才能mod_rewritemod_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}}。试验看什么效果最好。