特定URL模式的Apache mod ProxyErrorOverride代理

特定URL模式的Apache mod ProxyErrorOverride代理,apache,mod-proxy,Apache,Mod Proxy,我将Apache2.2与mod proxy一起使用,并使用几个ProxyPass语句将其配置为从远程URL代理到本地URL。我需要从Apache为这些代理URL返回自定义错误文档,因此我在mod proxy配置中设置了“ProxyErrorOverride On”以及一些ErrorDocument指令(带有本地URL路径),以返回一些感兴趣的HTTP状态代码的自定义错误页。但是,当返回状态代码时,如果我没有为其创建ErrorDocument指令,Apache将用默认错误页替换响应正文,而不是保留

我将Apache2.2与mod proxy一起使用,并使用几个ProxyPass语句将其配置为从远程URL代理到本地URL。我需要从Apache为这些代理URL返回自定义错误文档,因此我在mod proxy配置中设置了“ProxyErrorOverride On”以及一些ErrorDocument指令(带有本地URL路径),以返回一些感兴趣的HTTP状态代码的自定义错误页。但是,当返回状态代码时,如果我没有为其创建ErrorDocument指令,Apache将用默认错误页替换响应正文,而不是保留原始响应正文。这对应用程序不起作用。所以我有两个问题:

1) 如果没有为特定状态代码定义ErrorDocument覆盖,是否可以将Apache配置为保持原始响应主体不变


2) ProxyErrorOverride指令是否可能仅适用于我的ProxyPass语句中的某些URL?

正如arober11在上面的评论中指出的那样:


恐怕答案是:否。如果该指令可以限制为 一个位置、目录或一组URL,那么就会有一些东西 在手册页的“上下文”部分: httpd.apache.org/docs/2.2/mod/mod#u proxy.html#proxyerroroverride


另一方面:您可以自己将其添加到mod_proxy.c中。

对于问题2: 绝对可行。使用内部重定向到新主机或端口这是可能的。使用主机的简要概述(在DNS或apache机器的/etc/hosts中添加noerrorverrideurl、doerrorverrideurl):

NameVirtualHost*:80
重新启动发动机
重写规则^(/noerrorverrideurl/*)http://noErrorOverrideUrl$1[L,P]
重写规则^(/doerrorverrideurl/*)http://doErrorOverrideUrl$1[L,P]
服务器名NOERROVERRIDEURL
ProxyErrorOverride关闭
ProxyPass。。。
...
服务器名doErrorOverrideUrl
ProxyErrorOverride打开
ProxyPass。。。
...
使用端口的简要概述:

Listen 80
Listen 81
Listen 82
<VirtualHost *:80>
   RewriteEngine On
   RewriteRule ^(/noErrorOverrideUrl/.*) http://server:81$1 [L,P]
   RewriteRule ^(/doErrorOverrideUrl/.*) http://server:82$1 [L,P]
</VirtualHost>

<VirtualHost *:81>
   ProxyErrorOverride Off
   ProxyPass ...
   ...
</VirtualHost>

<VirtualHost *:82>
   ProxyErrorOverride On
   ProxyPass ...
   ...
</VirtualHost>
听80
听81
听82
重新启动发动机
重写规则^(/noerrorverrideurl/*)http://server:81$1[L,P]
重写规则^(/doerrorverrideurl/*)http://server:82$1[L,P]
ProxyErrorOverride关闭
ProxyPass。。。
...
ProxyErrorOverride打开
ProxyPass。。。
...

您可以升级apache并使用2.4版本中可用的If语句+

<VirtualHost *:80>
  ...
  <If "%{REQUEST_URI} =~ m#^\/QA(.*)$#">
      ProxyErrorOverride Off
  </If>
  ..
</VirtualHost>

...
ProxyErrorOverride关闭
..

答案恐怕是:否。如果指令可以限制在某个位置、目录或一组URL,则手册页的“上下文”部分中会有一些内容:
<VirtualHost *:80>
  ...
  <If "%{REQUEST_URI} =~ m#^\/QA(.*)$#">
      ProxyErrorOverride Off
  </If>
  ..
</VirtualHost>