反向代理在记录日志,跟踪,鉴权上,能很舒适的让你在那些不属于你的,或者无法修改源码的应用上做你想做的事.
反向代理不过就是一个处理请求,然这个请求到达后端服务的 http 服务器.运行时,可以对这些请求添加头部信息,记录数据,或者再鉴权失败时停止请求.
GO 在标准库中提供了反向代理的功能.是个很好的开始,但是你会发现少了一些辅助特性,比如记录日志,方便的管理路由.
另一方面, Gin 是一个很受欢迎的基于网络应用框架.可以快速创建强大的 REST API,有很多强大的特性并且由于底层使用 httprouter 所以非常快.现在的思路是通过 Gin 来处理 HTTP 请求,然后通过内建的反向代理将请求转发到后端.
ReverseProxy 结构体包含的 Director 属性,是一个告诉反向代理如何处理请求的函数.你可以改变 host,或者加一些头部,甚至检查鉴权.
用Gin来写一个反向代理服务
Gin 引擎提供处理请求的路由.你需要做的所有事只是声明一个路由,然后通过反向代理来处理所有请求.
记录请求体
大多数场景下,通过日志里的响应体的返回状态码就能判断服务是否失败.但这无法帮助你理解为什么失败.
最常见的解决方法是在应用中记录请求体.
但这可能会有点问题,你可能需要引入一个日志包或者日志类,然后改动你的代码.又或许你根本没办法修改源代码.
通过反向代理,可以很简单的在不修改应用代码的情况下记录日志.只需要在 Director 函数中记录请求体即可