From 2b040ed51cabbbd9552810b5a4026af1df856578 Mon Sep 17 00:00:00 2001 From: Falknat Date: Sun, 23 Nov 2025 03:54:56 +0700 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D1=80=D0=BE=D0=BA=D1=81=D0=B8?= =?UTF-8?q?=20=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Исправил важные ошибки и теперь правильно передаются данные ✅ $_POST - заполнен данными ✅ php://input - содержит raw body ✅ Content-Length - правильный размер ✅ $_SERVER['HTTP_X_REAL_IP'] - реальный IP клиента ✅ $_SERVER['HTTP_X_FORWARDED_FOR'] - реальный IP клиента ✅ $_SERVER['HTTP_X_FORWARDED_PROTO'] - протокол (http/https) --- .gitignore | 1 + Backend/WebServer/proxy_server.go | 28 +++++++++++++++++++++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 22d0862..c446014 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,5 @@ WebServer/cert/* WebServer/tools/logs/* WebServer/soft/* !WebServer/soft/soft.rar +Backend/admin/frontend/wailsjs* .cursorrules \ No newline at end of file diff --git a/Backend/WebServer/proxy_server.go b/Backend/WebServer/proxy_server.go index 9976ae3..dbe11c8 100644 --- a/Backend/WebServer/proxy_server.go +++ b/Backend/WebServer/proxy_server.go @@ -1,6 +1,7 @@ package webserver import ( + "bytes" "crypto/tls" "io" "log" @@ -71,9 +72,19 @@ func StartHandlerProxy(w http.ResponseWriter, r *http.Request) (valid bool) { protocol = "https" } + // Читаем тело запроса в буфер для корректной передачи POST данных + var bodyBuffer bytes.Buffer + if r.Body != nil { + if _, err := io.Copy(&bodyBuffer, r.Body); err != nil { + http.Error(w, "Ошибка чтения тела запроса", http.StatusInternalServerError) + return valid + } + r.Body.Close() + } + // Проксирование на локальный адрес proxyURL := protocol + "://" + proxyConfig.LocalAddress + ":" + proxyConfig.LocalPort + r.URL.RequestURI() - proxyReq, err := http.NewRequest(r.Method, proxyURL, r.Body) + proxyReq, err := http.NewRequest(r.Method, proxyURL, &bodyBuffer) if err != nil { http.Error(w, "Ошибка создания прокси-запроса", http.StatusInternalServerError) return valid @@ -95,8 +106,19 @@ func StartHandlerProxy(w http.ResponseWriter, r *http.Request) (valid bool) { } } - // Прозрачная передача - никаких дополнительных заголовков - // Все заголовки уже скопированы выше "как есть" + // Добавляем заголовки для передачи реального IP клиента + clientIP := r.RemoteAddr + if colonIndex := strings.LastIndex(clientIP, ":"); colonIndex != -1 { + clientIP = clientIP[:colonIndex] + } + proxyReq.Header.Set("X-Real-IP", clientIP) + proxyReq.Header.Set("X-Forwarded-For", clientIP) + proxyReq.Header.Set("X-Forwarded-Proto", protocol) + + // Устанавливаем правильный Content-Length для POST/PUT запросов + if bodyBuffer.Len() > 0 { + proxyReq.ContentLength = int64(bodyBuffer.Len()) + } // Выполняем прокси-запрос client := &http.Client{