diff --git a/pkg/services/pluginsintegration/clientmiddleware/grafana_request_id_header_middleware.go b/pkg/services/pluginsintegration/clientmiddleware/grafana_request_id_header_middleware.go index f5c62396571..f8282cd27e5 100644 --- a/pkg/services/pluginsintegration/clientmiddleware/grafana_request_id_header_middleware.go +++ b/pkg/services/pluginsintegration/clientmiddleware/grafana_request_id_header_middleware.go @@ -19,6 +19,7 @@ import ( const GrafanaRequestID = "X-Grafana-Request-Id" const GrafanaSignedRequestID = "X-Grafana-Signed-Request-Id" +const XRealIPHeader = "X-Real-Ip" const GrafanaInternalRequest = "X-Grafana-Internal-Request" // NewHostedGrafanaACHeaderMiddleware creates a new plugins.ClientMiddleware that will @@ -83,6 +84,7 @@ func (m *HostedGrafanaACHeaderMiddleware) applyGrafanaRequestIDHeader(ctx contex if reqCtx != nil && reqCtx.Req != nil { remoteAddress := web.RemoteAddr(reqCtx.Req) if remoteAddress != "" { + h.SetHTTPHeader(XRealIPHeader, remoteAddress) return } } diff --git a/pkg/services/pluginsintegration/clientmiddleware/grafana_request_id_header_middleware_test.go b/pkg/services/pluginsintegration/clientmiddleware/grafana_request_id_header_middleware_test.go index 4ef2ef76d83..8204c70d4af 100644 --- a/pkg/services/pluginsintegration/clientmiddleware/grafana_request_id_header_middleware_test.go +++ b/pkg/services/pluginsintegration/clientmiddleware/grafana_request_id_header_middleware_test.go @@ -54,6 +54,9 @@ func Test_HostedGrafanaACHeaderMiddleware(t *testing.T) { require.Equal(t, cdt.CallResourceReq.Headers[GrafanaSignedRequestID][0], computed) + require.Len(t, cdt.CallResourceReq.Headers[XRealIPHeader], 1) + require.Equal(t, cdt.CallResourceReq.Headers[XRealIPHeader][0], "1.2.3.4") + // Internal header should not be set require.Len(t, cdt.CallResourceReq.Headers[GrafanaInternalRequest], 0) })