mirror of
https://github.com/tobychui/zoraxy.git
synced 2025-08-09 22:57:47 +02:00
Added manual toggle for websocket header copy
- Added setting for toggling websocket header copy - Added close connection in TLS mode
This commit is contained in:
@@ -222,10 +222,12 @@ func (h *ProxyHandler) handleRootRouting(w http.ResponseWriter, r *http.Request)
|
||||
h.Parent.logRequest(r, false, 444, "root-noresponse", domainOnly)
|
||||
hijacker, ok := w.(http.Hijacker)
|
||||
if !ok {
|
||||
w.Header().Set("Connection", "close")
|
||||
return
|
||||
}
|
||||
conn, _, err := hijacker.Hijack()
|
||||
if err != nil {
|
||||
w.Header().Set("Connection", "close")
|
||||
return
|
||||
}
|
||||
conn.Close()
|
||||
|
@@ -42,23 +42,24 @@ func GetDefaultHeaderRewriteRules() *HeaderRewriteRules {
|
||||
func GetDefaultProxyEndpoint() ProxyEndpoint {
|
||||
randomPrefix := uuid.New().String()
|
||||
return ProxyEndpoint{
|
||||
ProxyType: ProxyTypeHost,
|
||||
RootOrMatchingDomain: randomPrefix + ".internal",
|
||||
MatchingDomainAlias: []string{},
|
||||
ActiveOrigins: []*loadbalance.Upstream{},
|
||||
InactiveOrigins: []*loadbalance.Upstream{},
|
||||
UseStickySession: false,
|
||||
UseActiveLoadBalance: false,
|
||||
Disabled: false,
|
||||
BypassGlobalTLS: false,
|
||||
VirtualDirectories: []*VirtualDirectoryEndpoint{},
|
||||
HeaderRewriteRules: GetDefaultHeaderRewriteRules(),
|
||||
AuthenticationProvider: GetDefaultAuthenticationProvider(),
|
||||
RequireRateLimit: false,
|
||||
RateLimit: 0,
|
||||
DisableUptimeMonitor: false,
|
||||
AccessFilterUUID: "default",
|
||||
DefaultSiteOption: DefaultSite_InternalStaticWebServer,
|
||||
DefaultSiteValue: "",
|
||||
ProxyType: ProxyTypeHost,
|
||||
RootOrMatchingDomain: randomPrefix + ".internal",
|
||||
MatchingDomainAlias: []string{},
|
||||
ActiveOrigins: []*loadbalance.Upstream{},
|
||||
InactiveOrigins: []*loadbalance.Upstream{},
|
||||
UseStickySession: false,
|
||||
UseActiveLoadBalance: false,
|
||||
Disabled: false,
|
||||
BypassGlobalTLS: false,
|
||||
VirtualDirectories: []*VirtualDirectoryEndpoint{},
|
||||
HeaderRewriteRules: GetDefaultHeaderRewriteRules(),
|
||||
EnableWebsocketCustomHeaders: false,
|
||||
AuthenticationProvider: GetDefaultAuthenticationProvider(),
|
||||
RequireRateLimit: false,
|
||||
RateLimit: 0,
|
||||
DisableUptimeMonitor: false,
|
||||
AccessFilterUUID: "default",
|
||||
DefaultSiteOption: DefaultSite_InternalStaticWebServer,
|
||||
DefaultSiteValue: "",
|
||||
}
|
||||
}
|
||||
|
@@ -152,7 +152,7 @@ func (h *ProxyHandler) hostRequest(w http.ResponseWriter, r *http.Request, targe
|
||||
wspHandler := websocketproxy.NewProxy(u, websocketproxy.Options{
|
||||
SkipTLSValidation: selectedUpstream.SkipCertValidations,
|
||||
SkipOriginCheck: selectedUpstream.SkipWebSocketOriginCheck,
|
||||
CopyAllHeaders: domainsniff.RequireWebsocketHeaderCopy(r),
|
||||
CopyAllHeaders: target.EnableWebsocketCustomHeaders,
|
||||
UserDefinedHeaders: target.HeaderRewriteRules.UserDefinedHeaders,
|
||||
Logger: h.Parent.Option.Logger,
|
||||
})
|
||||
@@ -232,11 +232,16 @@ func (h *ProxyHandler) vdirRequest(w http.ResponseWriter, r *http.Request, targe
|
||||
if target.RequireTLS {
|
||||
u, _ = url.Parse("wss://" + wsRedirectionEndpoint + r.URL.String())
|
||||
}
|
||||
|
||||
if target.parent.HeaderRewriteRules != nil {
|
||||
target.parent.HeaderRewriteRules = GetDefaultHeaderRewriteRules()
|
||||
}
|
||||
|
||||
h.Parent.logRequest(r, true, 101, "vdir-websocket", target.Domain)
|
||||
wspHandler := websocketproxy.NewProxy(u, websocketproxy.Options{
|
||||
SkipTLSValidation: target.SkipCertValidations,
|
||||
SkipOriginCheck: true, //You should not use websocket via virtual directory. But keep this to true for compatibility
|
||||
CopyAllHeaders: domainsniff.RequireWebsocketHeaderCopy(r), //Left this as default to prevent nginx user setting / as vdir
|
||||
SkipOriginCheck: target.parent.EnableWebsocketCustomHeaders, //You should not use websocket via virtual directory. But keep this to true for compatibility
|
||||
CopyAllHeaders: domainsniff.RequireWebsocketHeaderCopy(r), //Left this as default to prevent nginx user setting / as vdir
|
||||
UserDefinedHeaders: target.parent.HeaderRewriteRules.UserDefinedHeaders,
|
||||
Logger: h.Parent.Option.Logger,
|
||||
})
|
||||
|
@@ -1,5 +1,12 @@
|
||||
package dynamicproxy
|
||||
|
||||
/*
|
||||
typdef.go
|
||||
|
||||
This script handle the type definition for dynamic proxy and endpoints
|
||||
|
||||
If you are looking for the default object initailization, please refer to default.go
|
||||
*/
|
||||
import (
|
||||
_ "embed"
|
||||
"net"
|
||||
@@ -165,7 +172,8 @@ type ProxyEndpoint struct {
|
||||
VirtualDirectories []*VirtualDirectoryEndpoint
|
||||
|
||||
//Custom Headers
|
||||
HeaderRewriteRules *HeaderRewriteRules
|
||||
HeaderRewriteRules *HeaderRewriteRules
|
||||
EnableWebsocketCustomHeaders bool //Enable custom headers for websocket connections as well (default only http reqiests)
|
||||
|
||||
//Authentication
|
||||
AuthenticationProvider *AuthenticationProvider
|
||||
|
Reference in New Issue
Block a user