Merge branch 'master' of github.com:cloudflare/cloudflared
This commit is contained in:
commit
ff97fb6dc8
|
@ -712,6 +712,12 @@ func tunnelFlags(shouldHide bool) []cli.Flag {
|
||||||
EnvVars: []string{"TUNNEL_HOSTNAME"},
|
EnvVars: []string{"TUNNEL_HOSTNAME"},
|
||||||
Hidden: shouldHide,
|
Hidden: shouldHide,
|
||||||
}),
|
}),
|
||||||
|
altsrc.NewStringFlag(&cli.StringFlag{
|
||||||
|
Name: "http-host-header",
|
||||||
|
Usage: "Sets the HTTP Host header for the local webserver.",
|
||||||
|
EnvVars: []string{"TUNNEL_HTTP_HOST_HEADER"},
|
||||||
|
Hidden: shouldHide,
|
||||||
|
}),
|
||||||
altsrc.NewStringFlag(&cli.StringFlag{
|
altsrc.NewStringFlag(&cli.StringFlag{
|
||||||
Name: "origin-server-name",
|
Name: "origin-server-name",
|
||||||
Usage: "Hostname on the origin server certificate.",
|
Usage: "Hostname on the origin server certificate.",
|
||||||
|
|
|
@ -253,6 +253,7 @@ func prepareTunnelConfig(
|
||||||
HTTPTransport: httpTransport,
|
HTTPTransport: httpTransport,
|
||||||
HeartbeatInterval: c.Duration("heartbeat-interval"),
|
HeartbeatInterval: c.Duration("heartbeat-interval"),
|
||||||
Hostname: hostname,
|
Hostname: hostname,
|
||||||
|
HTTPHostHeader: c.String("http-host-header"),
|
||||||
IncidentLookup: origin.NewIncidentLookup(),
|
IncidentLookup: origin.NewIncidentLookup(),
|
||||||
IsAutoupdated: c.Bool("is-autoupdated"),
|
IsAutoupdated: c.Bool("is-autoupdated"),
|
||||||
IsFreeTunnel: isFreeTunnel,
|
IsFreeTunnel: isFreeTunnel,
|
||||||
|
|
|
@ -53,6 +53,7 @@ type TunnelConfig struct {
|
||||||
HTTPTransport http.RoundTripper
|
HTTPTransport http.RoundTripper
|
||||||
HeartbeatInterval time.Duration
|
HeartbeatInterval time.Duration
|
||||||
Hostname string
|
Hostname string
|
||||||
|
HTTPHostHeader string
|
||||||
IncidentLookup IncidentLookup
|
IncidentLookup IncidentLookup
|
||||||
IsAutoupdated bool
|
IsAutoupdated bool
|
||||||
IsFreeTunnel bool
|
IsFreeTunnel bool
|
||||||
|
@ -447,12 +448,13 @@ func H1ResponseToH2Response(h1 *http.Response) (h2 []h2mux.Header) {
|
||||||
}
|
}
|
||||||
|
|
||||||
type TunnelHandler struct {
|
type TunnelHandler struct {
|
||||||
originUrl string
|
originUrl string
|
||||||
muxer *h2mux.Muxer
|
httpHostHeader string
|
||||||
httpClient http.RoundTripper
|
muxer *h2mux.Muxer
|
||||||
tlsConfig *tls.Config
|
httpClient http.RoundTripper
|
||||||
tags []tunnelpogs.Tag
|
tlsConfig *tls.Config
|
||||||
metrics *TunnelMetrics
|
tags []tunnelpogs.Tag
|
||||||
|
metrics *TunnelMetrics
|
||||||
// connectionID is only used by metrics, and prometheus requires labels to be string
|
// connectionID is only used by metrics, and prometheus requires labels to be string
|
||||||
connectionID string
|
connectionID string
|
||||||
logger *log.Logger
|
logger *log.Logger
|
||||||
|
@ -473,6 +475,7 @@ func NewTunnelHandler(ctx context.Context,
|
||||||
}
|
}
|
||||||
h := &TunnelHandler{
|
h := &TunnelHandler{
|
||||||
originUrl: originURL,
|
originUrl: originURL,
|
||||||
|
httpHostHeader: config.HTTPHostHeader,
|
||||||
httpClient: config.HTTPTransport,
|
httpClient: config.HTTPTransport,
|
||||||
tlsConfig: config.ClientTlsConfig,
|
tlsConfig: config.ClientTlsConfig,
|
||||||
tags: config.Tags,
|
tags: config.Tags,
|
||||||
|
@ -566,6 +569,11 @@ func (h *TunnelHandler) createRequest(stream *h2mux.MuxedStream) (*http.Request,
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *TunnelHandler) serveWebsocket(stream *h2mux.MuxedStream, req *http.Request) (*http.Response, error) {
|
func (h *TunnelHandler) serveWebsocket(stream *h2mux.MuxedStream, req *http.Request) (*http.Response, error) {
|
||||||
|
if h.httpHostHeader != "" {
|
||||||
|
req.Header.Set("Host", h.httpHostHeader)
|
||||||
|
req.Host = h.httpHostHeader
|
||||||
|
}
|
||||||
|
|
||||||
conn, response, err := websocket.ClientConnect(req, h.tlsConfig)
|
conn, response, err := websocket.ClientConnect(req, h.tlsConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -594,6 +602,11 @@ func (h *TunnelHandler) serveHTTP(stream *h2mux.MuxedStream, req *http.Request)
|
||||||
// Request origin to keep connection alive to improve performance
|
// Request origin to keep connection alive to improve performance
|
||||||
req.Header.Set("Connection", "keep-alive")
|
req.Header.Set("Connection", "keep-alive")
|
||||||
|
|
||||||
|
if h.httpHostHeader != "" {
|
||||||
|
req.Header.Set("Host", h.httpHostHeader)
|
||||||
|
req.Host = h.httpHostHeader
|
||||||
|
}
|
||||||
|
|
||||||
response, err := h.httpClient.RoundTrip(req)
|
response, err := h.httpClient.RoundTrip(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "Error proxying request to origin")
|
return nil, errors.Wrap(err, "Error proxying request to origin")
|
||||||
|
|
Loading…
Reference in New Issue