Apache mod_jk和mod_用前缀重写

Apache mod_jk和mod_用前缀重写,apache,mod-rewrite,forward,mod-jk,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 +For

我们正试图将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

它在应用程序服务器中不是有效的资源,应该转到根目录(
172.30.34.50:8082

我们尝试使用
mod_rewrite
,但它在
mod_jk
之前触发,因此当apache尝试匹配
mod_jk
规则时,它不再满足条件。请求不会被转发

我们如何让mod_rewrite在mod_jk转发之前触发,以便应用服务器获得正确的URI

或者有没有一种方法可以配置
mod_jk
在没有上下文的情况下转发请求

我们如何才能让mod_rewrite在
mod_jk
执行 转发,以便应用程序服务器获得正确的URI

我不太清楚为什么我注意到人们询问
mod_jk
的次数有所增加,但根据我的经验,
mod_proxy
更有效,更容易理解您正在尝试做的事情

要在Apache中启用
mod_proxy
,请执行以下操作:;假设您使用的是Ubuntu/Debian:

sudo a2enmod proxy proxy_http
sudo service apache2 restart
然后像这样重新启动Apache;再次假设您使用的是Ubuntu/Debian:

sudo a2enmod proxy proxy_http
sudo service apache2 restart
完成后,这是一个简单的设置,应该可以在Apache配置中工作。根据您的设置进行调整:

# 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>
#用于向URL添加尾随斜杠的设置
重新启动发动机
重写cond%{REQUEST_URI}^/(server1| server2)$
重写规则^(.*)$http://%{http_HOST}$1/[R=301,L]
#Apache反向代理的设置
#代理特定设置
代理请求关闭
代理主机
添加默认字符集
命令拒绝,允许
通融
ProxyPass/server1http://172.30.34.50:8082/
ProxyPassReverse/server1http://172.30.34.50:8082/
ProxyPass/server2http://172.30.34.51:8082/
ProxyPassReverse/server2http://172.30.34.51:8082/
最初的
mod_rewrite
设置为URL添加了一个尾随斜杠,我发现在路径片段(如
/server1
/server2
)通过反向代理时需要这样做


另请注意,我设置了
/server1
/server2
,但它们可能需要添加一个斜杠,如此
/server1/
和此
/server2/
。尝试看看什么最有效。

是否可以配置mod_proxy以向web应用程序公开SSL信息?因为我们也在使用https(目前mod_jk使用AJPs)。非常感谢您的及时回复。@Katazo当然。应该传递SSL信息。这个过程与数据无关。我不知道为什么不会。