# README
reverseproxy (This is a community driven project)
reserve proxy
extension for Hertz
Install
go get github.com/hertz-contrib/reverseproxy
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 SetDirector
、SetModifyResponse
、SetErrorHandler
to modify Request
and Response
.
Websocket Reverse Proxy
Websocket reverse proxy for Hertz, inspired by fasthttp-reverse-proxy
package main
import (
"github.com/cloudwego/hertz/pkg/app/server"
"github.com/hertz-contrib/reverseproxy"
)
func main() {
h := server.Default()
h.GET("/backend", reverseproxy.NewWSReverseProxy("ws://example.com").ServeHTTP)
h.Spin()
}
Configuration | Default | Description |
---|---|---|
WithDirector | nil | customize the forward header |
WithDialer | gorillaws.DefaultDialer | for dialer customization |
WithUpgrader | hzws.HertzUpgrader | for upgrader customization |
More info
See example
# Functions
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
NewSingleHostReverseProxy returns a new ReverseProxy that routes URLs to the scheme, host, and base path provided in target.
NewWSReverseProxy new a proxy which will provide handler for websocket reverse proxy.
WithDialer for dialer customization.
WithDirector user can edit the forward header by using custom Director NOTE: custom Director will overwrite default forward header field if they have the same key.
WithUpgrader for upgrader customization.
# Variables
No description provided by the author
# Structs
No description provided by the author
No description provided by the author
No description provided by the author