我正在使用带有mod-proxy的Apache 2.2,并且我已经使用几个ProxyPass语句对其进行了配置,以便从远程URL代理到本地URL。我需要从Apache返回这些代理URL的自定义错误文档,因此我在我的mod-proxy配置中设置了“ProxyErrorOverride On”以及一些ErrorDocument指令(使用本地URL路径)来返回一些HTTP状态代码的自定义错误页面利益。但是,如果返回的状态代码我没有为其创建ErrorDocument指令,则Apache会使用默认错误页面替换响应正文,而不是保留原始响应正文。这不适用于该应用程序。所以我真的有两个问题:
1)如果没有为其定义ErrorDocument覆盖,是否可以将Apache配置为保留原始响应体的特定状态代码?
2)是否可以将ProxyErrorOverride指令仅应用于我的ProxyPass语句中的某些URL?
答案 0 :(得分:2)
asrober11在上面的评论中指出:
害怕答案是:否和否。如果指令可以限制为 一个位置,目录或一组URL,然后会有一些东西 在手册页的“上下文”部分中: httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxyerroroverride
另一方面:你总是可以自己将它添加到mod_proxy.c。
答案 1 :(得分:1)
问题2: 绝对可行。使用内部重定向到新主机或端口这是可能的。使用主机的简要概述(在DNS或/ etc / apache-hosts的主机中添加noErrorOverrideUrl,doErrorOverrideUrl):
NameVirtualHost *:80
<VirtualHost *:80>
RewriteEngine On
RewriteRule ^(/noErrorOverrideUrl/.*) http://noErrorOverrideUrl$1 [L,P]
RewriteRule ^(/doErrorOverrideUrl/.*) http://doErrorOverrideUrl$1 [L,P]
</VirtualHost>
<VirtualHost *:80>
ServerName noErrorOverrideUrl
ProxyErrorOverride Off
ProxyPass ...
...
</VirtualHost>
<VirtualHost *:80>
ServerName doErrorOverrideUrl
ProxyErrorOverride On
ProxyPass ...
...
</VirtualHost>
使用端口简要概述:
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>
答案 2 :(得分:0)
您可以升级apache并使用2.4+上可用的If句子
<VirtualHost *:80>
...
<If "%{REQUEST_URI} =~ m#^\/QA(.*)$#">
ProxyErrorOverride Off
</If>
..
</VirtualHost>