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 "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",

View File

@ -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

View File

@ -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)