reverseproxy

package module
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 4, 2023 License: Apache-2.0 Imports: 14 Imported by: 11

README

reverseproxy (This is a community driven project)

reserve proxy extension for Hertz

Quick Start

package main

import (
	"github.com/cloudwego/hertz/pkg/app/server"
	"github.com/hertz-contrib/reverseproxy"
)

func main() {
	h := server.New()
	rp, _ := reverseproxy.NewSingleHostReverseProxy("http://localhost:8082/test")
	h.GET("/ping", rp.ServeHTTP)
	h.Spin()
}
Use tls

Currently netpoll does not support tls,we need to use the net (standard library)

package main

import (
	"github.com/cloudwego/hertz/pkg/app/client"
	"github.com/cloudwego/hertz/pkg/app/server"
	"github.com/cloudwego/hertz/pkg/network/standard"
	"github.com/hertz-contrib/reverseproxy"
)

func main() {
	h := server.New()
	rp, _ := reverseproxy.NewSingleHostReverseProxy("https://localhost:8082/test",client.WithDialer(standard.NewDialer()))
	h.GET("/ping", rp.ServeHTTP)
	h.Spin()
}
Use service discovery

Use nacos as example and more information refer to registry

package main

import (
	"github.com/cloudwego/hertz/pkg/app/client"
	"github.com/cloudwego/hertz/pkg/app/middlewares/client/sd"
	"github.com/cloudwego/hertz/pkg/app/server"
	"github.com/cloudwego/hertz/pkg/common/config"
	"github.com/cloudwego/hertz/pkg/protocol"
	"github.com/hertz-contrib/registry/nacos"
	"github.com/hertz-contrib/reverseproxy"
)

func main() {
	cli, err := client.NewClient()
	if err != nil{
		panic(err)
	}
	r, err := nacos.NewDefaultNacosResolver()
	if err != nil{
		panic(err)
	}
	cli.Use(sd.Discovery(r))
	h := server.New()
	rp, _ := reverseproxy.NewSingleHostReverseProxy("http://test.demo.api/test")
	rp.SetClient(cli)
	rp.SetDirector(func(req *protocol.Request){
		req.SetRequestURI(string(reverseproxy.JoinURLPath(req, rp.Target)))
		req.Header.SetHostBytes(req.URI().Host())
		req.Options().Apply([]config.RequestOption{config.WithSD(true)})
	})
	h.GET("/ping", rp.ServeHTTP)
	h.Spin()
}
Request/Response

ReverseProxy provides SetDirectorSetModifyResponseSetErrorHandler to modify Request and Response.

More info

See example

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func JoinURLPath

func JoinURLPath(req *protocol.Request, target string) (path []byte)

Types

type ReverseProxy

type ReverseProxy struct {

	// target is set as a reverse proxy address
	Target string
	// contains filtered or unexported fields
}

func NewSingleHostReverseProxy

func NewSingleHostReverseProxy(target string, options ...config.ClientOption) (*ReverseProxy, error)

NewSingleHostReverseProxy returns a new ReverseProxy that routes URLs to the scheme, host, and base path provided in target. If the target's path is "/base" and the incoming request was for "/dir", the target request will be for /base/dir. NewSingleHostReverseProxy does not rewrite the Host header. To rewrite Host headers, use ReverseProxy directly with a custom director policy.

Note: if no config.ClientOption is passed it will use the default global client.Client instance. When passing config.ClientOption it will initialize a local client.Client instance. Using ReverseProxy.SetClient if there is need for shared customized client.Client instance.

func (*ReverseProxy) ServeHTTP

func (r *ReverseProxy) ServeHTTP(c context.Context, ctx *app.RequestContext)

func (*ReverseProxy) SetClient

func (r *ReverseProxy) SetClient(client *client.Client)

SetClient use to customize client

func (*ReverseProxy) SetDirector

func (r *ReverseProxy) SetDirector(director func(req *protocol.Request))

SetDirector use to customize protocol.Request

func (*ReverseProxy) SetErrorHandler

func (r *ReverseProxy) SetErrorHandler(eh func(c *app.RequestContext, err error))

SetErrorHandler use to customize error handler

func (*ReverseProxy) SetModifyResponse

func (r *ReverseProxy) SetModifyResponse(mr func(*protocol.Response) error)

SetModifyResponse use to modify response

func (*ReverseProxy) SetTransferTrailer added in v0.1.4

func (r *ReverseProxy) SetTransferTrailer(b bool)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL