From f5181718256d2f8a2349dc72d0d90202725a6e95 Mon Sep 17 00:00:00 2001 From: Falknat <> Date: Thu, 2 Oct 2025 09:34:19 +0700 Subject: [PATCH] =?UTF-8?q?Proxy=20-=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20AutoHTTPS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Включает Автоматическая перенаправление на HTTPS на proxy --- Backend/WebServer/proxy_server.go | 15 ++++++++++++--- Backend/config/config.go | 11 ++++++----- README.md | 27 +++++++++++++++++++++++---- WebServer/config.json | 3 ++- 4 files changed, 43 insertions(+), 13 deletions(-) diff --git a/Backend/WebServer/proxy_server.go b/Backend/WebServer/proxy_server.go index 18b7dec..daaa179 100644 --- a/Backend/WebServer/proxy_server.go +++ b/Backend/WebServer/proxy_server.go @@ -35,8 +35,17 @@ func StartHandlerProxy(w http.ResponseWriter, r *http.Request) (valid bool) { valid = true - // Логирование прокси-запроса + // Проверяем AutoHTTPS - редирект с HTTP на HTTPS https_check := !(r.TLS == nil) + if !https_check && proxyConfig.AutoHTTPS { + // Перенаправляем на HTTPS + httpsURL := "https://" + r.Host + r.URL.RequestURI() + http.Redirect(w, r, httpsURL, http.StatusMovedPermanently) + tools.Logs_file(0, "P-HTTP", "🔀 IP клиента: "+r.RemoteAddr+" Редирект HTTP → HTTPS: "+r.Host+r.URL.Path, "logs_http.log", false) + return valid + } + + // Логирование прокси-запроса if https_check { tools.Logs_file(0, "P-HTTPS", "🔍 IP клиента: "+r.RemoteAddr+" Обработка запроса: https://"+r.Host+r.URL.Path+" → "+proxyConfig.LocalAddress+":"+proxyConfig.LocalPort, "logs_https.log", false) } else { @@ -45,7 +54,7 @@ func StartHandlerProxy(w http.ResponseWriter, r *http.Request) (valid bool) { // Определяем протокол для локального соединения protocol := "http" - if proxyConfig.UseHTTPS { + if proxyConfig.ServiceHTTPSuse { protocol = "https" } @@ -85,7 +94,7 @@ func StartHandlerProxy(w http.ResponseWriter, r *http.Request) (valid bool) { } // Для HTTPS соединений настраиваем TLS (если понадобится) - if proxyConfig.UseHTTPS { + if proxyConfig.ServiceHTTPSuse { client.Transport = &http.Transport{ TLSClientConfig: &tls.Config{ InsecureSkipVerify: true, // Простая настройка для внутренних соединений diff --git a/Backend/config/config.go b/Backend/config/config.go index 930ccab..eef3100 100644 --- a/Backend/config/config.go +++ b/Backend/config/config.go @@ -33,11 +33,12 @@ type Soft_Settings struct { } type Proxy_Service struct { - Enable bool `json:"Enable"` - ExternalDomain string `json:"ExternalDomain"` - LocalAddress string `json:"LocalAddress"` - LocalPort string `json:"LocalPort"` - UseHTTPS bool `json:"UseHTTPS"` + Enable bool `json:"Enable"` + ExternalDomain string `json:"ExternalDomain"` + LocalAddress string `json:"LocalAddress"` + LocalPort string `json:"LocalPort"` + ServiceHTTPSuse bool `json:"ServiceHTTPSuse"` + AutoHTTPS bool `json:"AutoHTTPS"` } func LoadConfig() { diff --git a/README.md b/README.md index 6728c1b..bcc3345 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,8 @@ go build -o MyApp.exe "ExternalDomain": "git.example.ru", "LocalAddress": "127.0.0.1", "LocalPort": "3333", - "UseHTTPS": false + "ServiceHTTPSuse": false, + "AutoHTTPS": true } ], "Soft_Settings": { @@ -113,7 +114,8 @@ go build -o MyApp.exe - `ExternalDomain` - внешний домен для перехвата запросов - `LocalAddress` - локальный адрес сервиса - `LocalPort` - порт локального сервиса -- `UseHTTPS` - использовать HTTPS для локального подключения (true/false) +- `ServiceHTTPSuse` - использовать HTTPS для подключения к локальному сервису (true/false) +- `AutoHTTPS` - автоматически перенаправлять HTTP → HTTPS (true/false) **Пример множественных прокси:** ```json @@ -123,18 +125,35 @@ go build -o MyApp.exe "ExternalDomain": "git.example.com", "LocalAddress": "127.0.0.1", "LocalPort": "3000", - "UseHTTPS": false + "ServiceHTTPSuse": false, + "AutoHTTPS": true }, { "Enable": false, "ExternalDomain": "api.example.com", "LocalAddress": "127.0.0.1", "LocalPort": "8080", - "UseHTTPS": false + "ServiceHTTPSuse": false, + "AutoHTTPS": false } ] ``` +#### 📖 Подробное описание параметров: + +**`ServiceHTTPSuse`** - протокол подключения к локальному сервису: +- `false` - vServer подключается к локальному сервису по HTTP (по умолчанию) +- `true` - vServer подключается к локальному сервису по HTTPS + +**`AutoHTTPS`** - автоматический редирект на HTTPS: +- `true` - все HTTP запросы автоматически перенаправляются на HTTPS (рекомендуется) +- `false` - разрешены как HTTP, так и HTTPS запросы + +**Схема работы:** +``` +Клиент (HTTP/HTTPS) → vServer (проверка AutoHTTPS) → Локальный сервис (ServiceHTTPSuse) +``` + **Применение изменений:** - Введите команду `config_reload` в консоли для перезагрузки конфигурации - Изменения применятся к новым запросам без перезапуска сервера diff --git a/WebServer/config.json b/WebServer/config.json index 060304b..4762141 100644 --- a/WebServer/config.json +++ b/WebServer/config.json @@ -16,7 +16,8 @@ "ExternalDomain": "git.example.ru", "LocalAddress": "127.0.0.1", "LocalPort": "3333", - "UseHTTPS": false + "ServiceHTTPSuse": false, + "AutoHTTPS": true } ],