@@ -32,8 +32,9 @@ func NewProxy(
3232 logger * log.Logger ,
3333) * Proxy {
3434 reverseProxy := & httputil.ReverseProxy {
35- Director : director (defaultBackend , logger ),
36- ErrorHandler : errorHandler (logger ),
35+ Director : director (defaultBackend , logger ),
36+ ModifyResponse : modifyResponse (),
37+ ErrorHandler : errorHandler (logger ),
3738 }
3839 return & Proxy {
3940 server : & http.Server {
@@ -92,6 +93,22 @@ func director(defaultBackend *url.URL, logger *log.Logger) func(req *http.Reques
9293 }
9394}
9495
96+ func modifyResponse () func (* http.Response ) error {
97+ return func (res * http.Response ) error {
98+ route , ok := res .Request .Context ().Value (routeCtxKey ).(* domain.Route )
99+ if ! ok {
100+ // if route not set, then default backend was used and no route match config available
101+ return nil
102+ }
103+
104+ for k , v := range route .ProxyResponseHeaders {
105+ res .Header .Set (k , v )
106+ }
107+
108+ return nil
109+ }
110+ }
111+
95112func errorHandler (logger * log.Logger ) func (http.ResponseWriter , * http.Request , error ) {
96113 return func (w http.ResponseWriter , r * http.Request , err error ) {
97114 logger .Printf ("%+v\n " , err )
@@ -135,6 +152,7 @@ func handler(
135152 logger .Printf (err .Error ())
136153 w .WriteHeader (http .StatusBadGateway )
137154 _ , _ = w .Write ([]byte ("Bad gateway" ))
155+ return
138156 }
139157
140158 http .Redirect (w , r , u .String (), redirectStatusCode (matchedRoute .Redirect .Type ))
0 commit comments