Apache 中默认的 /server-status 位置未继承

Apache 中默认的 /server-status 位置未继承

我在使 /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

您需要添加代理排除 — 您的ProxyPassProxyPassMatch指令应如下所示:

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>

相关内容