Documentation
¶
Index ¶
- Constants
- Variables
- func CheckSupportMultiplex(proto string) bool
- func Redirect(w bfe_http.ResponseWriter, r *bfe_http.Request, urlStr string, code int, ...)
- func StartUp(cfg bfe_conf.BfeConfig, version string, confRoot string, dryRun bool) error
- type BfeListener
- type BfeMonitor
- type BfeServer
- func (srv *BfeServer) BalTableStatusGet(query url.Values) ([]byte, error)
- func (srv *BfeServer) BalTableVersionGet(query url.Values) ([]byte, error)
- func (srv *BfeServer) Balance(e interface{}) (*backend.BfeBackend, error)
- func (srv *BfeServer) CheckGracefulShutdown() bool
- func (srv *BfeServer) ClusterTableVersionGet(query url.Values) ([]byte, error)
- func (srv *BfeServer) FindLocation(request *bfe_basic.Request) (string, error)
- func (srv *BfeServer) FindProduct(conn net.Conn) string
- func (srv *BfeServer) GetCheckConf(clusterName string) *cluster_conf.BackendCheck
- func (srv *BfeServer) GetServerConf() *bfe_route.ServerDataConf
- func (srv *BfeServer) GslbDataConfReload(query url.Values) error
- func (srv *BfeServer) HostTableStatusGet(query url.Values) ([]byte, error)
- func (srv *BfeServer) HostTableVersionGet(query url.Values) ([]byte, error)
- func (srv *BfeServer) InitConfig()
- func (srv *BfeServer) InitDataLoad() error
- func (srv *BfeServer) InitHttp() (err error)
- func (srv *BfeServer) InitHttps() (err error)
- func (srv *BfeServer) InitListeners(config bfe_conf.BfeConfig) error
- func (srv *BfeServer) InitModules() error
- func (srv *BfeServer) InitSignalTable()
- func (srv *BfeServer) InitWebMonitor(port int) error
- func (srv *BfeServer) ModuleHandlersGetJSON() ([]byte, error)
- func (srv *BfeServer) ModuleStatusGetJSON() ([]byte, error)
- func (srv *BfeServer) NameConfReload(query url.Values) error
- func (srv *BfeServer) RegisterModules(modules []string) error
- func (srv *BfeServer) Serve(l net.Listener, raw net.Listener, proto string) error
- func (srv *BfeServer) ServeHttp(ln net.Listener) error
- func (srv *BfeServer) ServeHttps(ln *HttpsListener) error
- func (srv *BfeServer) ServerDataConfReload(query url.Values) error
- func (srv *BfeServer) SessionTicketKeyReload() error
- func (srv *BfeServer) ShutdownHandler(sig os.Signal)
- func (srv *BfeServer) TLSConfReload(query url.Values) error
- type BufioCache
- type CloseNotifier
- type HttpsListener
- type MultiCertMap
- type NameCertMap
- type NextProtosConf
- type ProtocolHandler
- type ProxyState
- func (s *ProxyState) ClientConnActiveDec(proto string, value uint)
- func (s *ProxyState) ClientConnActiveInc(proto string, value uint)
- func (s *ProxyState) ClientConnServedInc(proto string, value uint)
- func (s *ProxyState) ClientReqActiveDec(proto string, value uint)
- func (s *ProxyState) ClientReqActiveInc(proto string, value uint)
- func (s *ProxyState) ClientReqServedInc(proto string, value uint)
- type ReverseProxy
- type RoundTripperMap
- type ServerRule
- type ServerSessionCache
- type ServerStatus
- type TLSServerRuleMap
- func (m *TLSServerRuleMap) EnableNextProto(proto string, state bool)
- func (m *TLSServerRuleMap) Get(c *bfe_tls.Conn) *bfe_tls.Rule
- func (m *TLSServerRuleMap) GetHTTP2Rule(c *bfe_tls.Conn) *bfe_http2.Rule
- func (m *TLSServerRuleMap) GetStreamRule(c *bfe_tls.Conn) *bfe_stream.Rule
- func (m *TLSServerRuleMap) StatusNextProto() (enableHttp2 bool, enableSpdy bool)
- func (m *TLSServerRuleMap) Update(conf tls_rule_conf.BfeTlsRuleConf, clientCAMap map[string]*x509.CertPool, ...)
- type Version
Constants ¶
const ( DC_INTERVAL = 60 // interval for moving current to past (in s) DC_BUCKET_SIZE_PROXY = 1 // size of delay counter bucket for forwarding (in ms) DC_BUCKET_SIZE_HS = 100 // size of delay counter bucket for handshake (in ms) DC_BUCKET_NUM = 10 // number of delay counter bucket )
setting for delay
const ( KP_PROXY_DELAY = "proxy_delay" KP_PROXY_POST_DEALY = "proxy_post_delay" KP_PROXY_HANDSHAKE_DELAY = "proxy_handshake_delay" KP_PROXY_HANDSHAKE_FULL_DELAY = "proxy_handshake_full_delay" KP_PROXY_HANDSHAKE_RESUME_DELAY = "proxy_handshake_resume_delay" KP_PROXY_STATE = "proxy_state" )
key prefix
const TrailerPrefix = "Trailer:"
TrailerPrefix is a magic prefix for ResponseWriter.Header map keys that, if present, signals that the map entry is actually for the response trailers, and not the response headers. The prefix is stripped after the ServeHTTP call finishes and the values are sent in the trailers.
This mechanism is intended only for trailers that are not known prior to the headers being written. If the set of trailers is fixed or known before the header is written, the normal Go trailers mechanism is preferred:
https://golang.org/pkg/net/http/#ResponseWriter https://golang.org/pkg/net/http/#example_ResponseWriter_trailers
Variables ¶
var ( ErrBodyNotAllowed = errors.New("http: request method or response status code does not allow body") ErrContentLength = errors.New("Conn.Write wrote more than the declared Content-Length") ErrHijacked = errors.New("http: connection has been hijacked") )
Errors introduced by the HTTP server.
var (
DefaultNextProtos = []string{tls_rule_conf.HTTP11}
)
var ErrExpectContinueReaderPeek = errors.New("http: expect continue reader peek failed")
Functions ¶
func CheckSupportMultiplex ¶
CheckSupportMultiplex checks whether protocol support request multiplexing on a conn.
Types ¶
type BfeListener ¶
type BfeListener struct { // Listener is the underlying tcp listener Listener net.Listener // BalancerType is the type of Layer4 load balancer BalancerType string // ProxyHeaderTimeout Optionally specifies the timeout value to // receive the Proxy Protocol Header. Zero means no timeout. ProxyHeaderTimeout time.Duration // ProxyHeaderLimit Optionally specifies the maximum bytes to // receive the Proxy Protocol Header. Zero means default value. ProxyHeaderLimit int64 }
BfeListener is used to wrap an underlying TCP listener, which accept connections behind a layer4 load balancer (PROXY)
func NewBfeListener ¶
func NewBfeListener(listener net.Listener, config bfe_conf.BfeConfig) *BfeListener
NewBfeListener return bfe listener according to config
func (*BfeListener) Accept ¶
func (l *BfeListener) Accept() (net.Conn, error)
Accept implements the Accept method in the Listener interface; it waits for the next call and returns a generic net.Conn.
func (*BfeListener) Addr ¶
func (l *BfeListener) Addr() net.Addr
Addr returns the underlying listener's network address.
func (*BfeListener) Close ¶
func (l *BfeListener) Close() error
Close closes the underlying listener.
type BfeMonitor ¶
type BfeMonitor struct { WebServer *web_monitor.MonitorServer WebHandlers *web_monitor.WebHandlers // contains filtered or unexported fields }
func (*BfeMonitor) Start ¶
func (m *BfeMonitor) Start()
func (*BfeMonitor) WebHandlersInit ¶
func (m *BfeMonitor) WebHandlersInit(srv *BfeServer) error
type BfeServer ¶
type BfeServer struct { bfe_http.Server HttpListener net.Listener // listener for http HttpsListener *HttpsListener // listener for https // for http server ReverseProxy *ReverseProxy // reverse proxy // TLS session cache SessionCache *ServerSessionCache // TLS certificates MultiCert *MultiCertMap // TLS server rule TLSServerRule *TLSServerRuleMap // server config Config bfe_conf.BfeConfig ConfRoot string // module and callback CallBacks *bfe_module.BfeCallbacks // call back functions Modules *bfe_module.BfeModules // bfe modules // web server for bfe monitor and reload Monitor *BfeMonitor // bufio cache BufioCache *BufioCache // signal table SignalTable *signal_table.SignalTable ServerConf *bfe_route.ServerDataConf // cluster_conf and host table conf Version string // version of bfe server // contains filtered or unexported fields }
func NewBfeServer ¶
NewBfeServer create a new instance of BfeServer.
func (*BfeServer) BalTableStatusGet ¶
BalTableStatusGet returns state of balTable.
func (*BfeServer) BalTableVersionGet ¶
BalTableVersionGet returns versions of balTable.
func (*BfeServer) Balance ¶
func (srv *BfeServer) Balance(e interface{}) (*backend.BfeBackend, error)
Balance finds backend for proxied conn (under tls proxy mode).
func (*BfeServer) CheckGracefulShutdown ¶
CheckGracefulShutdown check whether the server is in graceful shutdown state.
func (*BfeServer) ClusterTableVersionGet ¶
ClusterTableVersionGet returns versions of clusterTable.
func (*BfeServer) FindLocation ¶
FindLocation finds product and cluster for given request
func (*BfeServer) FindProduct ¶
FindProduct finds product for proxied conn (under tls proxy mode).
func (*BfeServer) GetCheckConf ¶
func (srv *BfeServer) GetCheckConf(clusterName string) *cluster_conf.BackendCheck
GetCheckConf implements CheckConfFetcher and return current health check configuration.
func (*BfeServer) GetServerConf ¶
func (srv *BfeServer) GetServerConf() *bfe_route.ServerDataConf
func (*BfeServer) GslbDataConfReload ¶
GslbDataConfReload reloads gslb and cluster conf.
func (*BfeServer) HostTableStatusGet ¶
HostTableStatusGet returns status of HostTable in json.
func (*BfeServer) HostTableVersionGet ¶
HostTableVersionGet returns version of HostTable in json.
func (*BfeServer) InitConfig ¶
func (srv *BfeServer) InitConfig()
InitConfig set some parameter based on config.
func (*BfeServer) InitDataLoad ¶
InitDataLoad load data when bfe start.
func (*BfeServer) InitListeners ¶
func (*BfeServer) InitModules ¶
func (*BfeServer) InitSignalTable ¶
func (srv *BfeServer) InitSignalTable()
func (*BfeServer) InitWebMonitor ¶
func (*BfeServer) ModuleHandlersGetJSON ¶
func (*BfeServer) ModuleStatusGetJSON ¶
func (*BfeServer) NameConfReload ¶
NameConfReload reloads name conf data.
func (*BfeServer) RegisterModules ¶
RegisterModules registers bfe work module.
func (*BfeServer) Serve ¶
Serve accepts incoming connections on the Listener l, creating a new service goroutine for each. The service goroutines read requests and then call srv.Handler to reply to them.
Params
- l : net listener
- raw: underlying tcp listener (different from `l` in HTTPS)
Return
- err: error
func (*BfeServer) ServeHttps ¶
func (srv *BfeServer) ServeHttps(ln *HttpsListener) error
ServeHttps accept incoming https connections
func (*BfeServer) ServerDataConfReload ¶
ServerDataConfReload reloads host/route/cluster conf
func (*BfeServer) SessionTicketKeyReload ¶
SessionTicketKeyReload reloads for session ticket key.
func (*BfeServer) ShutdownHandler ¶
ShutdownHandler is signal handler for QUIT
type CloseNotifier ¶
type CloseNotifier interface { // CloseNotify returns a channel that receives a single value // when the client connection has gone away. CloseNotify() <-chan bool }
The CloseNotifier interface is implemented by ResponseWriters which allow detecting when the underlying connection has gone away.
This mechanism can be used to cancel long operations on the server if the client has disconnected before the response is ready.
type HttpsListener ¶
type HttpsListener struct {
// contains filtered or unexported fields
}
func NewHttpsListener ¶
func NewHttpsListener(listener net.Listener, config *bfe_tls.Config) *HttpsListener
func (*HttpsListener) UpdateSessionTicketKey ¶
func (l *HttpsListener) UpdateSessionTicketKey(key []byte)
UpdateSessionTicketKey updates session ticket key.
type MultiCertMap ¶
type MultiCertMap struct {
// contains filtered or unexported fields
}
func NewMultiCertMap ¶
func NewMultiCertMap(state *ProxyState) *MultiCertMap
func (*MultiCertMap) Get ¶
func (m *MultiCertMap) Get(c *bfe_tls.Conn) *bfe_tls.Certificate
Get gets certificate for given connection.
func (*MultiCertMap) GetDefault ¶
func (m *MultiCertMap) GetDefault() *bfe_tls.Certificate
func (*MultiCertMap) Update ¶
func (m *MultiCertMap) Update(certConf map[string]*bfe_tls.Certificate, ruleMap tls_rule_conf.TlsRuleMap) error
Update updates all certificates.
type NameCertMap ¶
type NameCertMap struct {
// contains filtered or unexported fields
}
func NewNameCertMap ¶
func NewNameCertMap() *NameCertMap
func (*NameCertMap) Get ¶
func (m *NameCertMap) Get(serverName string) *bfe_tls.Certificate
func (*NameCertMap) Update ¶
func (m *NameCertMap) Update(certConf map[string]*bfe_tls.Certificate)
type NextProtosConf ¶
type NextProtosConf struct {
// contains filtered or unexported fields
}
func NewNextProtosConf ¶
func NewNextProtosConf(rule *TLSServerRuleMap, protoConf []string) *NextProtosConf
type ProtocolHandler ¶
type ProtocolHandler struct {
// contains filtered or unexported fields
}
func NewProtocolHandler ¶
func NewProtocolHandler(conn *conn, proto string) *ProtocolHandler
func (*ProtocolHandler) ServeHTTP ¶
func (p *ProtocolHandler) ServeHTTP(rw bfe_http.ResponseWriter, request *bfe_http.Request)
ServeHTTP processes http request and send http response.
Params:
- w : a response writer
- r : a http request
type ProxyState ¶
type ProxyState struct { // panic PanicClientConnServe *metrics.Counter // panic when accept from client PanicBackendWrite *metrics.Counter // panic when write to backend PanicBackendRead *metrics.Counter // panic when read from backend // client side errors ErrClientLongUrl *metrics.Counter ErrClientLongHeader *metrics.Counter ErrClientClose *metrics.Counter ErrClientTimeout *metrics.Counter ErrClientBadRequest *metrics.Counter ErrClientZeroContentlen *metrics.Counter ErrClientExpectFail *metrics.Counter ErrClientConnAccept *metrics.Counter ErrClientWrite *metrics.Counter ErrClientReset *metrics.Counter // route config errors ErrBkFindProduct *metrics.Counter ErrBkFindLocation *metrics.Counter ErrBkNoBalance *metrics.Counter ErrBkNoCluster *metrics.Counter // backend side errors ErrBkConnectBackend *metrics.Counter ErrBkRequestBackend *metrics.Counter ErrBkWriteRequest *metrics.Counter ErrBkReadRespHeader *metrics.Counter ErrBkRespHeaderTimeout *metrics.Counter ErrBkTransportBroken *metrics.Counter // tls handshake TlsHandshakeAll *metrics.Counter TlsHandshakeSucc *metrics.Counter // tls session cache SessionCacheConn *metrics.Counter SessionCacheConnFail *metrics.Counter SessionCacheSet *metrics.Counter SessionCacheSetFail *metrics.Counter SessionCacheGet *metrics.Counter SessionCacheGetFail *metrics.Counter SessionCacheTypeNotBytes *metrics.Counter SessionCacheMiss *metrics.Counter SessionCacheHit *metrics.Counter SessionCacheNoInstance *metrics.Counter // tls multiply certificates TlsMultiCertGet *metrics.Counter TlsMultiCertConnWithoutVip *metrics.Counter TlsMultiCertConnVipUnknown *metrics.Counter TlsMultiCertConnWithoutSni *metrics.Counter TlsMultiCertUseDefault *metrics.Counter TlsMultiCertUpdate *metrics.Counter TlsMultiCertUpdateErr *metrics.Counter // client side ClientReqWithRetry *metrics.Counter // req served with retry ClientReqWithCrossRetry *metrics.Counter // req served with cross cluster retry ClientReqFail *metrics.Counter // req with ErrCode != nil ClientReqFailWithNoRetry *metrics.Counter // req fail with no retry ClientConnUse100Continue *metrics.Counter // connection used Expect 100 Continue ClientConnUnfinishedReq *metrics.Counter // connection closed with unfinished request // request successful received ClientReqServed *metrics.Counter HttpClientReqServed *metrics.Counter HttpsClientReqServed *metrics.Counter Http2ClientReqServed *metrics.Counter SpdyClientReqServed *metrics.Counter // active request ClientReqActive *metrics.Gauge HttpClientReqActive *metrics.Gauge HttpsClientReqActive *metrics.Gauge Http2ClientReqActive *metrics.Gauge SpdyClientReqActive *metrics.Gauge // connection successful accepted ClientConnServed *metrics.Counter HttpClientConnServed *metrics.Counter HttpsClientConnServed *metrics.Counter Http2ClientConnServed *metrics.Counter SpdyClientConnServed *metrics.Counter StreamClientConnServed *metrics.Counter WsClientConnServed *metrics.Counter WssClientConnServed *metrics.Counter // active connection ClientConnActive *metrics.Gauge HttpClientConnActive *metrics.Gauge HttpsClientConnActive *metrics.Gauge Http2ClientConnActive *metrics.Gauge SpdyClientConnActive *metrics.Gauge StreamClientConnActive *metrics.Gauge WsClientConnActive *metrics.Gauge WssClientConnActive *metrics.Gauge }
func (*ProxyState) ClientConnActiveDec ¶
func (s *ProxyState) ClientConnActiveDec(proto string, value uint)
func (*ProxyState) ClientConnActiveInc ¶
func (s *ProxyState) ClientConnActiveInc(proto string, value uint)
func (*ProxyState) ClientConnServedInc ¶
func (s *ProxyState) ClientConnServedInc(proto string, value uint)
func (*ProxyState) ClientReqActiveDec ¶
func (s *ProxyState) ClientReqActiveDec(proto string, value uint)
func (*ProxyState) ClientReqActiveInc ¶
func (s *ProxyState) ClientReqActiveInc(proto string, value uint)
func (*ProxyState) ClientReqServedInc ¶
func (s *ProxyState) ClientReqServedInc(proto string, value uint)
type ReverseProxy ¶
type ReverseProxy struct {
// contains filtered or unexported fields
}
ReverseProxy takes an incoming request and sends it to another server, proxying the response back to the client.
func NewReverseProxy ¶
func NewReverseProxy(server *BfeServer, state *ProxyState) *ReverseProxy
NewReverseProxy returns a new ReverseProxy.
func (*ReverseProxy) FinishReq ¶
func (p *ReverseProxy) FinishReq(rw bfe_http.ResponseWriter, request *bfe_basic.Request) (action int)
FinishReq should be invoked after quit ServHTTP().
func (*ReverseProxy) ServeHTTP ¶
func (p *ReverseProxy) ServeHTTP(rw bfe_http.ResponseWriter, basicReq *bfe_basic.Request) (action int)
ServeHTTP processes http request and send http response.
Params:
- rw : context for sending response
- request: context for request
Return:
- action: action to do after ServeHTTP
type RoundTripperMap ¶
type RoundTripperMap map[string]bfe_http.RoundTripper
RoundTripperMap holds mappings from cluster-name to RoundTripper.
type ServerRule ¶
type ServerSessionCache ¶
type ServerSessionCache struct { Servers []string // tcp address for redis servers ConnectTimeout time.Duration // connect timeout (ms) ReadTimeout time.Duration // read timeout (ms) WriteTimeout time.Duration // write timeout (ms) KeyPrefix string // prefix for cache key SessionExpire int // expire time for tls session state (s) MaxIdle int // max idle connections in pool // contains filtered or unexported fields }
func NewServerSessionCache ¶
func NewServerSessionCache(conf bfe_conf.ConfigSessionCache, state *ProxyState) ( c *ServerSessionCache)
func (*ServerSessionCache) Get ¶
func (c *ServerSessionCache) Get(sessionKey string) ([]byte, bool)
Get gets sessionState from session cache.
func (*ServerSessionCache) Put ¶
func (c *ServerSessionCache) Put(sessionKey string, sessionState []byte) (err error)
Put saves sessionState to session cache.
func (*ServerSessionCache) UpdatePool ¶
func (c *ServerSessionCache) UpdatePool(pool *redis.Pool) *redis.Pool
func (*ServerSessionCache) UpdateServers ¶
func (c *ServerSessionCache) UpdateServers(servers []string)
type ServerStatus ¶
type ServerStatus struct { // for proxy protocol ProxyProtocolState *bfe_proxy.ProxyState ProxyProtocolMetrics metrics.Metrics // for tls protocol TlsState *bfe_tls.TlsState TlsMetrics metrics.Metrics // for spdy protocol SpdyState *bfe_spdy.SpdyState SpdyMetrics metrics.Metrics // for http2 protocol Http2State *bfe_http2.Http2State Http2Metrics metrics.Metrics // for http protocol HttpState *bfe_http.HttpState HttpMetrics metrics.Metrics // for stream protocol (tls proxy) StreamState *bfe_stream.StreamState StreamMetrics metrics.Metrics // for websocket protocol (websocket proxy) WebSocketState *bfe_websocket.WebSocketState WebSocketMetrics metrics.Metrics // for balance BalState *bal.BalErrState BalMetrics metrics.Metrics // for proxy ProxyState *ProxyState ProxyMetrics metrics.Metrics // for monitor "internal delay" ProxyDelay *delay_counter.DelayRecent // for monitor "internal delay" of post/put request ProxyPostDelay *delay_counter.DelayRecent // for monitor "internal delay" of tls handshake ProxyHandshakeDelay *delay_counter.DelayRecent ProxyHandshakeFullDelay *delay_counter.DelayRecent ProxyHandshakeResumeDelay *delay_counter.DelayRecent }
func NewServerStatus ¶
func NewServerStatus() *ServerStatus
type TLSServerRuleMap ¶
type TLSServerRuleMap struct {
// contains filtered or unexported fields
}
func NewTLSServerRuleMap ¶
func NewTLSServerRuleMap(state *ProxyState) *TLSServerRuleMap
func (*TLSServerRuleMap) EnableNextProto ¶
func (m *TLSServerRuleMap) EnableNextProto(proto string, state bool)
func (*TLSServerRuleMap) Get ¶
func (m *TLSServerRuleMap) Get(c *bfe_tls.Conn) *bfe_tls.Rule
Get returns tls rule for given connection.
func (*TLSServerRuleMap) GetHTTP2Rule ¶
func (m *TLSServerRuleMap) GetHTTP2Rule(c *bfe_tls.Conn) *bfe_http2.Rule
GetHTTP2Rule returns h2 rule for given connection.
func (*TLSServerRuleMap) GetStreamRule ¶
func (m *TLSServerRuleMap) GetStreamRule(c *bfe_tls.Conn) *bfe_stream.Rule
GetStreamRule returns stream rule for given connection.
func (*TLSServerRuleMap) StatusNextProto ¶
func (m *TLSServerRuleMap) StatusNextProto() (enableHttp2 bool, enableSpdy bool)
func (*TLSServerRuleMap) Update ¶
func (m *TLSServerRuleMap) Update(conf tls_rule_conf.BfeTlsRuleConf, clientCAMap map[string]*x509.CertPool, clientCRLPoolMap map[string]*bfe_tls.CRLPool)
Source Files
¶
- bfe_confdata_load.go
- bfe_listener.go
- bfe_server.go
- bfe_server_init.go
- bufio_cache.go
- chunk_writer.go
- expect_continue_reader.go
- find_location.go
- http_conn.go
- http_server.go
- https_listener.go
- monitor_stat.go
- protocol_handler.go
- proxy_state.go
- redirect.go
- register_modules.go
- response.go
- reverseproxy.go
- server_status.go
- set_client_addr.go
- tls_multi_cert.go
- tls_server_rule.go
- tls_session_cache.go
- web_server.go