socket fix
This commit is contained in:
		
							parent
							
								
									bd67125ee4
								
							
						
					
					
						commit
						a3c7bbed44
					
				@ -60,6 +60,14 @@
 | 
				
			|||||||
        "allow_untrusted": false
 | 
					        "allow_untrusted": false
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
 | 
					    "/socket.io": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "url": "https://yobble-socket-service",
 | 
				
			||||||
 | 
					        "role": "master",
 | 
				
			||||||
 | 
					        "yobble_signed": true,
 | 
				
			||||||
 | 
					        "allow_untrusted": false
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
    "/test": [
 | 
					    "/test": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        "url": "https://localhost:9097",
 | 
					        "url": "https://localhost:9097",
 | 
				
			||||||
 | 
				
			|||||||
@ -56,16 +56,25 @@ func GetRealIP(r *http.Request) string {
 | 
				
			|||||||
// RemoveTrailingSlashMiddleware перенаправляет запросы с завершающим слэшем (если это не просто '/')
 | 
					// RemoveTrailingSlashMiddleware перенаправляет запросы с завершающим слэшем (если это не просто '/')
 | 
				
			||||||
// на тот же путь без завершающего слэша.
 | 
					// на тот же путь без завершающего слэша.
 | 
				
			||||||
func RemoveTrailingSlashMiddleware(next http.Handler) http.Handler {
 | 
					func RemoveTrailingSlashMiddleware(next http.Handler) http.Handler {
 | 
				
			||||||
	op := "middleware.RemoveTrailingSlashMiddleware"
 | 
					    op := "middleware.RemoveTrailingSlashMiddleware"
 | 
				
			||||||
	log := logger.NewLoggerWithOp(op)
 | 
					    log := logger.NewLoggerWithOp(op)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 | 
					    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 | 
				
			||||||
		urlPath := r.URL.Path
 | 
					        urlPath := r.URL.Path
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if urlPath != "" && urlPath != "/" && strings.HasSuffix(urlPath, "/") {
 | 
					        // Skip redirect for Socket.IO and WebSocket upgrade traffic
 | 
				
			||||||
			newPath := strings.TrimSuffix(urlPath, "/")
 | 
					        // Socket.IO may rely on a trailing slash in polling endpoints.
 | 
				
			||||||
			newURL := *r.URL
 | 
					        if strings.HasPrefix(urlPath, "/socket.io") || strings.HasPrefix(urlPath, "/ws/socket.io") ||
 | 
				
			||||||
			newURL.Path = newPath
 | 
					            strings.EqualFold(r.Header.Get("Upgrade"), "websocket") ||
 | 
				
			||||||
 | 
					            strings.Contains(strings.ToLower(r.Header.Get("Connection")), "upgrade") {
 | 
				
			||||||
 | 
					            next.ServeHTTP(w, r)
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if urlPath != "" && urlPath != "/" && strings.HasSuffix(urlPath, "/") {
 | 
				
			||||||
 | 
					            newPath := strings.TrimSuffix(urlPath, "/")
 | 
				
			||||||
 | 
					            newURL := *r.URL
 | 
				
			||||||
 | 
					            newURL.Path = newPath
 | 
				
			||||||
			log.Debug("redirecting trailing slash", slog.String("old_path", urlPath), slog.String("new_path", newPath))
 | 
								log.Debug("redirecting trailing slash", slog.String("old_path", urlPath), slog.String("new_path", newPath))
 | 
				
			||||||
			http.Redirect(w, r, newURL.String(), http.StatusMovedPermanently)
 | 
								http.Redirect(w, r, newURL.String(), http.StatusMovedPermanently)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
 | 
				
			|||||||
@ -9,6 +9,7 @@ import (
 | 
				
			|||||||
	"net/http/httputil"
 | 
						"net/http/httputil"
 | 
				
			||||||
	"net/url"
 | 
						"net/url"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
 | 
					    "strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"yobble-gateway-go/internal/config"
 | 
						"yobble-gateway-go/internal/config"
 | 
				
			||||||
	"yobble-gateway-go/internal/logger"
 | 
						"yobble-gateway-go/internal/logger"
 | 
				
			||||||
@ -58,7 +59,11 @@ func NewProxyHandler(cfg *config.Settings, geoIPService *geoip.GeoIPService) htt
 | 
				
			|||||||
			originalDirector(req) // Устанавливает базовые заголовки и URL
 | 
								originalDirector(req) // Устанавливает базовые заголовки и URL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// Устанавливаем правильный путь для бэкенда
 | 
								// Устанавливаем правильный путь для бэкенда
 | 
				
			||||||
			req.URL.Path = tailPath
 | 
								if strings.HasPrefix(r.URL.Path, "/socket.io") {
 | 
				
			||||||
 | 
									req.URL.Path = r.URL.Path
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									req.URL.Path = tailPath
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// Устанавливаем заголовки для информирования бэкенда об исходном запросе
 | 
								// Устанавливаем заголовки для информирования бэкенда об исходном запросе
 | 
				
			||||||
			req.Header.Set("X-Real-IP", realIP)
 | 
								req.Header.Set("X-Real-IP", realIP)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user