diff --git a/pkg/rpc/pb/service_reverse_proxy.pb.go b/pkg/rpc/pb/service_reverse_proxy.pb.go index 64608a2..9ca143f 100644 --- a/pkg/rpc/pb/service_reverse_proxy.pb.go +++ b/pkg/rpc/pb/service_reverse_proxy.pb.go @@ -498,18 +498,19 @@ func (x *UpdateReverseProxyBackupOriginsRequest) GetOriginsJSON() []byte { return nil } -// 修改是否启用 +// 修改反向代理设置 type UpdateReverseProxyRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ReverseProxyId int64 `protobuf:"varint,1,opt,name=reverseProxyId,proto3" json:"reverseProxyId,omitempty"` - RequestHostType int32 `protobuf:"varint,6,opt,name=requestHostType,proto3" json:"requestHostType,omitempty"` - RequestHost string `protobuf:"bytes,2,opt,name=requestHost,proto3" json:"requestHost,omitempty"` - RequestURI string `protobuf:"bytes,3,opt,name=requestURI,proto3" json:"requestURI,omitempty"` - StripPrefix string `protobuf:"bytes,4,opt,name=stripPrefix,proto3" json:"stripPrefix,omitempty"` - AutoFlush bool `protobuf:"varint,5,opt,name=autoFlush,proto3" json:"autoFlush,omitempty"` + ReverseProxyId int64 `protobuf:"varint,1,opt,name=reverseProxyId,proto3" json:"reverseProxyId,omitempty"` + RequestHostType int32 `protobuf:"varint,6,opt,name=requestHostType,proto3" json:"requestHostType,omitempty"` + RequestHost string `protobuf:"bytes,2,opt,name=requestHost,proto3" json:"requestHost,omitempty"` + RequestURI string `protobuf:"bytes,3,opt,name=requestURI,proto3" json:"requestURI,omitempty"` + StripPrefix string `protobuf:"bytes,4,opt,name=stripPrefix,proto3" json:"stripPrefix,omitempty"` + AutoFlush bool `protobuf:"varint,5,opt,name=autoFlush,proto3" json:"autoFlush,omitempty"` + AddHeaders []string `protobuf:"bytes,7,rep,name=addHeaders,proto3" json:"addHeaders,omitempty"` } func (x *UpdateReverseProxyRequest) Reset() { @@ -586,6 +587,13 @@ func (x *UpdateReverseProxyRequest) GetAutoFlush() bool { return false } +func (x *UpdateReverseProxyRequest) GetAddHeaders() []string { + if x != nil { + return x.AddHeaders + } + return nil +} + var File_service_reverse_proxy_proto protoreflect.FileDescriptor var file_service_reverse_proxy_proto_rawDesc = []byte{ @@ -652,7 +660,7 @@ var file_service_reverse_proxy_proto_rawDesc = []byte{ 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x73, 0x4a, 0x53, 0x4f, 0x4e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x73, 0x4a, 0x53, 0x4f, 0x4e, - 0x22, 0xef, 0x01, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x65, 0x72, + 0x22, 0x8f, 0x02, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x50, @@ -667,7 +675,9 @@ var file_service_reverse_proxy_proto_rawDesc = []byte{ 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x70, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x46, 0x6c, 0x75, - 0x73, 0x68, 0x32, 0xa2, 0x05, 0x0a, 0x13, 0x52, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x50, 0x72, + 0x73, 0x68, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x64, 0x64, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, + 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x64, 0x64, 0x48, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x73, 0x32, 0xa2, 0x05, 0x0a, 0x13, 0x52, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x53, 0x0a, 0x12, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x65, @@ -936,7 +946,7 @@ type ReverseProxyServiceClient interface { UpdateReverseProxyPrimaryOrigins(ctx context.Context, in *UpdateReverseProxyPrimaryOriginsRequest, opts ...grpc.CallOption) (*RPCSuccess, error) // 修改备用源站信息 UpdateReverseProxyBackupOrigins(ctx context.Context, in *UpdateReverseProxyBackupOriginsRequest, opts ...grpc.CallOption) (*RPCSuccess, error) - // 修改是否启用 + // 修改反向代理设置 UpdateReverseProxy(ctx context.Context, in *UpdateReverseProxyRequest, opts ...grpc.CallOption) (*RPCSuccess, error) } @@ -1025,7 +1035,7 @@ type ReverseProxyServiceServer interface { UpdateReverseProxyPrimaryOrigins(context.Context, *UpdateReverseProxyPrimaryOriginsRequest) (*RPCSuccess, error) // 修改备用源站信息 UpdateReverseProxyBackupOrigins(context.Context, *UpdateReverseProxyBackupOriginsRequest) (*RPCSuccess, error) - // 修改是否启用 + // 修改反向代理设置 UpdateReverseProxy(context.Context, *UpdateReverseProxyRequest) (*RPCSuccess, error) } diff --git a/pkg/rpc/protos/service_reverse_proxy.proto b/pkg/rpc/protos/service_reverse_proxy.proto index fa441f3..26a18e1 100644 --- a/pkg/rpc/protos/service_reverse_proxy.proto +++ b/pkg/rpc/protos/service_reverse_proxy.proto @@ -25,7 +25,7 @@ service ReverseProxyService { // 修改备用源站信息 rpc updateReverseProxyBackupOrigins (UpdateReverseProxyBackupOriginsRequest) returns (RPCSuccess); - // 修改是否启用 + // 修改反向代理设置 rpc updateReverseProxy (UpdateReverseProxyRequest) returns (RPCSuccess); } @@ -76,7 +76,7 @@ message UpdateReverseProxyBackupOriginsRequest { bytes originsJSON = 2; } -// 修改是否启用 +// 修改反向代理设置 message UpdateReverseProxyRequest { int64 reverseProxyId = 1; int32 requestHostType = 6; @@ -84,4 +84,5 @@ message UpdateReverseProxyRequest { string requestURI = 3; string stripPrefix = 4; bool autoFlush = 5; + repeated string addHeaders = 7; } \ No newline at end of file diff --git a/pkg/serverconfigs/reverse_proxy_config.go b/pkg/serverconfigs/reverse_proxy_config.go index d3f7248..2776fdc 100644 --- a/pkg/serverconfigs/reverse_proxy_config.go +++ b/pkg/serverconfigs/reverse_proxy_config.go @@ -4,6 +4,7 @@ import ( "github.com/TeaOSLab/EdgeCommon/pkg/configutils" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/schedulingconfigs" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared" + "github.com/iwind/TeaGo/lists" "sync" ) @@ -30,6 +31,8 @@ type ReverseProxyConfig struct { RequestHost string `yaml:"requestHost" json:"requestHost"` // 请求Host,支持变量 RequestURI string `yaml:"requestURI" json:"requestURI"` // 请求URI,支持变量,如果同时定义了StripPrefix,则先执行StripPrefix + AddHeaders []string `yaml:"addHeaders" json:"addHeaders"` // 自动添加的Header + AutoFlush bool `yaml:"autoFlush" json:"autoFlush"` // 是否自动刷新缓冲区,在比如SSE(server-sent events)场景下很有用 requestHostHasVariables bool @@ -40,6 +43,13 @@ type ReverseProxyConfig struct { schedulingIsBackup bool schedulingObject schedulingconfigs.SchedulingInterface schedulingLocker sync.Mutex + + addXRealIPHeader bool + addXForwardedForHeader bool + addForwardedHeader bool + addXForwardedByHeader bool + addXForwardedHostHeader bool + addXForwardedProtoHeader bool } // 初始化 @@ -67,6 +77,13 @@ func (this *ReverseProxyConfig) Init() error { // scheduling this.SetupScheduling(false) + // Header + this.addXRealIPHeader = lists.ContainsString(this.AddHeaders, "X-Real-IP") + this.addXForwardedForHeader = lists.ContainsString(this.AddHeaders, "X-Forwarded-For") + this.addXForwardedByHeader = lists.ContainsString(this.AddHeaders, "X-Forwarded-By") + this.addXForwardedHostHeader = lists.ContainsString(this.AddHeaders, "X-Forwarded-Host") + this.addXForwardedProtoHeader = lists.ContainsString(this.AddHeaders, "X-Forwarded-Proto") + return nil } @@ -170,3 +187,28 @@ func (this *ReverseProxyConfig) RequestHostHasVariables() bool { func (this *ReverseProxyConfig) RequestURIHasVariables() bool { return this.requestURIHasVariables } + +// 是否添加X-Real-IP +func (this *ReverseProxyConfig) ShouldAddXRealIPHeader() bool { + return this.addXRealIPHeader +} + +// 是否添加X-Forwarded-For +func (this *ReverseProxyConfig) ShouldAddXForwardedForHeader() bool { + return this.addXForwardedForHeader +} + +// 是否添加X-Forwarded-By +func (this *ReverseProxyConfig) ShouldAddXForwardedByHeader() bool { + return this.addXForwardedByHeader +} + +// 是否添加X-Forwarded-Host +func (this *ReverseProxyConfig) ShouldAddXForwardedHostHeader() bool { + return this.addXForwardedHostHeader +} + +// 是否添加X-Forwarded-Proto +func (this *ReverseProxyConfig) ShouldAddXForwardedProtoHeader() bool { + return this.addXForwardedProtoHeader +}