Apache mod_jk和mod_用前缀重写
我们正试图将apache配置为将请求转发到托管不同应用程序服务器的不同服务器 我们希望实现以下目标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
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信息。这个过程与数据无关。我不知道为什么不会。