Documentation ¶
Index ¶
- Constants
- Variables
- func GetHttpsHostname(c net.Conn) (_ net.Conn, _ map[string]string, err error)
- type BufferPool
- type ByLocation
- type CreateConnFunc
- type HttpReverseProxy
- func (rp *HttpReverseProxy) CheckAuth(domain, location, user, passwd string) bool
- func (rp *HttpReverseProxy) CreateConnection(domain string, location string, remoteAddr string) (net.Conn, error)
- func (rp *HttpReverseProxy) GetHeaders(domain string, location string) (headers map[string]string)
- func (rp *HttpReverseProxy) GetRealHost(domain string, location string) (host string)
- func (rp *HttpReverseProxy) Register(routeCfg VhostRouteConfig) error
- func (rp *HttpReverseProxy) ServeHTTP(rw http.ResponseWriter, req *http.Request)
- func (rp *HttpReverseProxy) UnRegister(domain string, location string)
- type HttpReverseProxyOptions
- type HttpsMuxer
- type Listener
- type ReverseProxy
- type VhostMuxer
- type VhostRouteConfig
- type VhostRouter
- type VhostRouters
Constants ¶
const (
NotFound = `` /* 489-byte string literal not displayed */
)
Variables ¶
var (
ErrNoDomain = errors.New("no such domain")
)
var (
ErrRouterConfigConflict = errors.New("router config conflict")
)
var (
NotFoundPagePath = ""
)
Functions ¶
Types ¶
type BufferPool ¶
A BufferPool is an interface for getting and returning temporary byte slices for use by io.CopyBuffer.
type ByLocation ¶
type ByLocation []*VhostRouter
sort by location
func (ByLocation) Len ¶
func (a ByLocation) Len() int
func (ByLocation) Less ¶
func (a ByLocation) Less(i, j int) bool
func (ByLocation) Swap ¶
func (a ByLocation) Swap(i, j int)
type HttpReverseProxy ¶
type HttpReverseProxy struct {
// contains filtered or unexported fields
}
func NewHttpReverseProxy ¶
func NewHttpReverseProxy(option HttpReverseProxyOptions, vhostRouter *VhostRouters) *HttpReverseProxy
func (*HttpReverseProxy) CheckAuth ¶
func (rp *HttpReverseProxy) CheckAuth(domain, location, user, passwd string) bool
func (*HttpReverseProxy) CreateConnection ¶
func (rp *HttpReverseProxy) CreateConnection(domain string, location string, remoteAddr string) (net.Conn, error)
CreateConnection create a new connection by route config
func (*HttpReverseProxy) GetHeaders ¶
func (rp *HttpReverseProxy) GetHeaders(domain string, location string) (headers map[string]string)
func (*HttpReverseProxy) GetRealHost ¶
func (rp *HttpReverseProxy) GetRealHost(domain string, location string) (host string)
func (*HttpReverseProxy) Register ¶
func (rp *HttpReverseProxy) Register(routeCfg VhostRouteConfig) error
Register register the route config to reverse proxy reverse proxy will use CreateConnFn from routeCfg to create a connection to the remote service
func (*HttpReverseProxy) ServeHTTP ¶
func (rp *HttpReverseProxy) ServeHTTP(rw http.ResponseWriter, req *http.Request)
func (*HttpReverseProxy) UnRegister ¶
func (rp *HttpReverseProxy) UnRegister(domain string, location string)
UnRegister unregister route config by domain and location
type HttpReverseProxyOptions ¶
type HttpReverseProxyOptions struct {
ResponseHeaderTimeoutS int64
}
type ReverseProxy ¶
type ReverseProxy struct { // Director must be a function which modifies // the request into a new request to be sent // using Transport. Its response is then copied // back to the original client unmodified. // Director must not access the provided Request // after returning. Director func(*http.Request) // The transport used to perform proxy requests. // If nil, http.DefaultTransport is used. Transport http.RoundTripper // FlushInterval specifies the flush interval // to flush to the client while copying the // response body. // If zero, no periodic flushing is done. // A negative value means to flush immediately // after each write to the client. // The FlushInterval is ignored when ReverseProxy // recognizes a response as a streaming response; // for such responses, writes are flushed to the client // immediately. FlushInterval time.Duration // ErrorLog specifies an optional logger for errors // that occur when attempting to proxy the request. // If nil, logging is done via the log package's standard logger. ErrorLog *log.Logger // BufferPool optionally specifies a buffer pool to // get byte slices for use by io.CopyBuffer when // copying HTTP response bodies. BufferPool BufferPool // ModifyResponse is an optional function that modifies the // Response from the backend. It is called if the backend // returns a response at all, with any HTTP status code. // If the backend is unreachable, the optional ErrorHandler is // called without any call to ModifyResponse. // // If ModifyResponse returns an error, ErrorHandler is called // with its error value. If ErrorHandler is nil, its default // implementation is used. ModifyResponse func(*http.Response) error // ErrorHandler is an optional function that handles errors // reaching the backend or errors from ModifyResponse. // // If nil, the default is to log the provided error and return // a 502 Status Bad Gateway response. ErrorHandler func(http.ResponseWriter, *http.Request, error) }
ReverseProxy is an HTTP Handler that takes an incoming request and sends it to another server, proxying the response back to the client.
func NewSingleHostReverseProxy ¶
func NewSingleHostReverseProxy(target *url.URL) *ReverseProxy
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.
func (*ReverseProxy) ServeHTTP ¶
func (p *ReverseProxy) ServeHTTP(rw http.ResponseWriter, req *http.Request)
type VhostMuxer ¶
type VhostMuxer struct {
// contains filtered or unexported fields
}
func NewVhostMuxer ¶
func (*VhostMuxer) Listen ¶
func (v *VhostMuxer) Listen(ctx context.Context, cfg *VhostRouteConfig) (l *Listener, err error)
listen for a new domain name, if rewriteHost is not empty and rewriteFunc is not nil then rewrite the host header to rewriteHost
type VhostRouteConfig ¶
type VhostRouteConfig struct { Domain string Location string RewriteHost string Username string Password string Headers map[string]string CreateConnFn CreateConnFunc }
VhostRouteConfig is the params used to match HTTP requests
type VhostRouter ¶
type VhostRouter struct {
// contains filtered or unexported fields
}
type VhostRouters ¶
type VhostRouters struct { RouterByDomain map[string][]*VhostRouter // contains filtered or unexported fields }
func NewVhostRouters ¶
func NewVhostRouters() *VhostRouters
func (*VhostRouters) Add ¶
func (r *VhostRouters) Add(domain, location string, payload interface{}) error
func (*VhostRouters) Del ¶
func (r *VhostRouters) Del(domain, location string)
func (*VhostRouters) Get ¶
func (r *VhostRouters) Get(host, path string) (vr *VhostRouter, exist bool)