我正在处理一个专有的 HTTP 服务器,它总是响应代码 200 — 即使发生错误。错误指示(如果有)只能在自定义标头中找到,例如:(MyApp-Status: SECURITY_EXCEPTION
在成功的请求中,标头包含OK
)。
我正在将基于 Apache 的代理放在它前面,并想修复这个无意义的问题。
我如何根据来源的标头将响应的状态从来源指定的(虚假的) 200 更改为更合适的值MyApp-Status
?
我知道,mod_headers 会修改响应的标头——它可以修改地位也一样?
并且 mod_rewrite 可以设置状态——但它可以应用于回复?
答案1
mod_headers 会在将完整响应发送回客户端之前进行“后期”处理。在反向代理场景中,应允许它根据后端服务器发送的标头进行更改和设置标头。
手册中的示例中的示例场景 #4https://httpd.apache.org/docs/2.4/mod/mod_headers.html似乎适合您的用例。
从理论上讲,这样的事情应该可行:
<LocationMatch "/myapp">
ProxyPass http://hostname:8080/myapp
ProxyPassReverse http://hostname:8080/myapp
SetEnvIf MyApp-Status SECURITY_EXCEPTION HAVE_MyRequestHeader
Header set Status "403" env=HAVE_MyRequestHeader
</LocationMatch>
但请测试并报告。