socket fix

This commit is contained in:
unknown 2025-10-20 19:36:01 +03:00
parent bd67125ee4
commit a3c7bbed44
3 changed files with 31 additions and 9 deletions

View File

@ -60,6 +60,14 @@
"allow_untrusted": false
}
],
"/socket.io": [
{
"url": "https://yobble-socket-service",
"role": "master",
"yobble_signed": true,
"allow_untrusted": false
}
],
"/test": [
{
"url": "https://localhost:9097",

View File

@ -56,16 +56,25 @@ func GetRealIP(r *http.Request) string {
// RemoveTrailingSlashMiddleware перенаправляет запросы с завершающим слэшем (если это не просто '/')
// на тот же путь без завершающего слэша.
func RemoveTrailingSlashMiddleware(next http.Handler) http.Handler {
op := "middleware.RemoveTrailingSlashMiddleware"
log := logger.NewLoggerWithOp(op)
op := "middleware.RemoveTrailingSlashMiddleware"
log := logger.NewLoggerWithOp(op)
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
urlPath := r.URL.Path
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
urlPath := r.URL.Path
if urlPath != "" && urlPath != "/" && strings.HasSuffix(urlPath, "/") {
newPath := strings.TrimSuffix(urlPath, "/")
newURL := *r.URL
newURL.Path = newPath
// Skip redirect for Socket.IO and WebSocket upgrade traffic
// Socket.IO may rely on a trailing slash in polling endpoints.
if strings.HasPrefix(urlPath, "/socket.io") || strings.HasPrefix(urlPath, "/ws/socket.io") ||
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))
http.Redirect(w, r, newURL.String(), http.StatusMovedPermanently)
return

View File

@ -9,6 +9,7 @@ import (
"net/http/httputil"
"net/url"
"os"
"strings"
"yobble-gateway-go/internal/config"
"yobble-gateway-go/internal/logger"
@ -58,7 +59,11 @@ func NewProxyHandler(cfg *config.Settings, geoIPService *geoip.GeoIPService) htt
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)