我目前正在研究(仅出于个人目的)是否可以编写位于 HTTP.sys 下的过滤器驱动程序以拦截请求。
这个想法是调查是否可以覆盖 503 Service Unavailable 屏幕(因为显然,不可能覆盖或更改它)。
问题是我不确定 HTTP.sys 是如何实现的,它是否是位于某些网络驱动程序下的过滤器驱动程序,或者 HTTP.sys 是否被某些虚拟设备使用。
我认为不可能覆盖来自 http.sys 的 503 错误响应。查看http 2 api 参考,我们只能覆盖冗长。http.sys 驱动程序侦听 http 请求并将其传递给正在侦听 IP:hostname:port 组合的服务。
您可以从 iis 端覆盖 503,但不能从 http.sys 覆盖。所以一个简单的技巧(不是那么好)是设置 ARR + UrlRewrite 反向代理,每当您的后端服务抛出 503 时,您可以像这样从前端抛出自定义 503 .
www.example.com:80 => exampleweb:80 => localhost:8080(实际网站)。
而您的实际站点位于端口 8080。如果它抛出 503,那么您可以从 exampleweb 抛出自定义 503
但是,如果前端出现故障,这仍然会给出 503 错误,但如果它只是用作反向代理,那么这不太可能。正如我所说,这绝对不是一个好方法,但可能比编写过滤器驱动程序更好。
我相信 IIS 不允许您覆盖 503(和其他一些)...但是您“可以”做的是httpd
在它前面拍打并使用反向代理和重写模块来修改响应。
像这样的东西: