View Source
const (
	NotFound = "" /* 481 byte string literal not displayed */



View Source
var (
	ErrRouterConfigConflict = errors.New("router config conflict")
	ErrNoDomain             = errors.New("no such domain")


func GetHttpRequestInfo

func GetHttpRequestInfo(c frpNet.Conn) (_ frpNet.Conn, _ map[string]string, err error)

func GetHttpsHostname

func GetHttpsHostname(c frpNet.Conn) (_ frpNet.Conn, _ map[string]string, err error)

func HttpAuthFunc

func HttpAuthFunc(c frpNet.Conn, userName, passWord, authorization string) (bAccess bool, err error)

func IsWebsocketRequest

func IsWebsocketRequest(req *http.Request) bool

func ModifyHttpRequest

func ModifyHttpRequest(c frpNet.Conn, rewriteHost string) (_ frpNet.Conn, err error)


type BufferPool

type BufferPool interface {
	Get() []byte

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 CreateConnFunc

type CreateConnFunc func() (frpNet.Conn, error)

type HttpMuxer

type HttpMuxer struct {

func NewHttpMuxer

func NewHttpMuxer(listener frpNet.Listener, timeout time.Duration) (*HttpMuxer, error)

type HttpReverseProxy

type HttpReverseProxy struct {

	// contains filtered or unexported fields


func NewHttpReverseProxy

func NewHttpReverseProxy(option HttpReverseProxyOptions) *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) (net.Conn, error)

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

func (*HttpReverseProxy) ServeHTTP

func (rp *HttpReverseProxy) ServeHTTP(rw http.ResponseWriter, req *http.Request)

func (*HttpReverseProxy) UnRegister

func (rp *HttpReverseProxy) UnRegister(domain string, location string)

type HttpReverseProxyOptions

type HttpReverseProxyOptions struct {
	ResponseHeaderTimeoutS int64

type HttpsMuxer

type HttpsMuxer struct {

func NewHttpsMuxer

func NewHttpsMuxer(listener frpNet.Listener, timeout time.Duration) (*HttpsMuxer, error)

type Listener

type Listener struct {
	log.Logger // contains filtered or unexported fields


func (*Listener) Accept

func (l *Listener) Accept() (frpNet.Conn, error)

func (*Listener) Close

func (l *Listener) Close() error

func (*Listener) Name

func (l *Listener) Name() string

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.
	FlushInterval time.Duration

	// ErrorLog specifies an optional logger for errors
	// that occur when attempting to proxy the request.
	// If nil, logging goes to os.Stderr 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.
	// If it returns an error, the proxy returns a StatusBadGateway error.
	ModifyResponse func(*http.Response) error

	WebSocketDialContext func(ctx context.Context, network, addr string) (net.Conn, 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 NewVhostMuxer(listener frpNet.Listener, vhostFunc muxFunc, authFunc httpAuthFunc, rewriteFunc hostRewriteFunc, timeout time.Duration) (mux *VhostMuxer, err error)

func (*VhostMuxer) Listen

func (v *VhostMuxer) Listen(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

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{})

func (*VhostRouters) Del

func (r *VhostRouters) Del(domain, location string)

func (*VhostRouters) Exist

func (r *VhostRouters) Exist(host, path string) (vr *VhostRouter, exist bool)

func (*VhostRouters) Get

func (r *VhostRouters) Get(host, path string) (vr *VhostRouter, exist bool)