用于特定URL模式的Apache mod-proxy ProxyErrorOverride

时间:2011-09-28 19:04:47

标签: apache mod-proxy

我正在使用带有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?

3 个答案:

答案 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>

Documentation