我在使 /server-status 在 Ubuntu Server 10.04.1 上运行 Apache 2.2.14 时遇到了问题。
status.load 和 status.conf 的默认符号链接位于 /etc/apache2/mods-enabled 中。status.conf 包含 location /server-status 和适当的 allow/deny 指令。
但是,我在 sites-enabled 中拥有的唯一 vhost 如下所示。这个想法是将任何带有 Tomcat URL 的内容代理到 tomcat 集群,将任何其他内容代理到 IIS 框。但是,这似乎会导致对 /server-status 的请求被发送到 IIS。无论我使用什么顺序,将 /server-status 明确复制到 Vhost 配置似乎都没有帮助。是否可以在具有“默认”代理规则的 vhost 配置中包含 /server-status 来执行此操作?:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<Proxy balancer://tomcatCluster>
BalancerMember ajp://qa-app1:8009 route=1
BalancerMember ajp://qa-app2:8009 route=2
ProxySet stickysession=ROUTEID
</Proxy>
<ProxyMatch "^/(mytomcatappA|mytomcatappB)/(.*)" >
ProxyPassMatch balancer://tomcatCluster/$1/$2
</ProxyMatch>
#proxy anything that's not a tomcat URL to IIS on port 80
<Proxy />
ProxyPass http://qa-web1/
</Proxy>
答案1
您需要添加代理排除 — 您的ProxyPass
和ProxyPassMatch
指令应如下所示:
ProxyPassMatch ^/(mytomcatappA|mytomcatappB)/(.*) balancer://tomcatCluster/$1/$2
ProxyPass /server-status !
ProxyPass / http://qa-web1/
!
代替目标 URL 表示“从代理中排除指定路径”。指令应按最具体的 URL 排序,因为将使用第一个匹配的指令。
并且没有记录将ProxyPass
和放入和容器ProxyPassMatch
内—— 不确定它是否真的能正常工作;只需将它们放在里面即可。<Proxy>
<ProxyMatch>
<VirtualHost>
答案2
代替:
<Proxy />
ProxyPass http://qa-web1/
</Proxy>
和:
<ProxyMatch ! "^/server-status">
ProxyPass http://qa-web1/
</Proxy>