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