Proxy - Добавление AutoHTTPS

Включает Автоматическая перенаправление на HTTPS на proxy
This commit is contained in:
Falknat
2025-10-02 09:34:19 +07:00
parent 21d1a4e13b
commit f518171825
4 changed files with 43 additions and 13 deletions

View File

@@ -35,8 +35,17 @@ func StartHandlerProxy(w http.ResponseWriter, r *http.Request) (valid bool) {
valid = true valid = true
// Логирование прокси-запроса // Проверяем AutoHTTPS - редирект с HTTP на HTTPS
https_check := !(r.TLS == nil) 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 { 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) tools.Logs_file(0, "P-HTTPS", "🔍 IP клиента: "+r.RemoteAddr+" Обработка запроса: https://"+r.Host+r.URL.Path+" → "+proxyConfig.LocalAddress+":"+proxyConfig.LocalPort, "logs_https.log", false)
} else { } else {
@@ -45,7 +54,7 @@ func StartHandlerProxy(w http.ResponseWriter, r *http.Request) (valid bool) {
// Определяем протокол для локального соединения // Определяем протокол для локального соединения
protocol := "http" protocol := "http"
if proxyConfig.UseHTTPS { if proxyConfig.ServiceHTTPSuse {
protocol = "https" protocol = "https"
} }
@@ -85,7 +94,7 @@ func StartHandlerProxy(w http.ResponseWriter, r *http.Request) (valid bool) {
} }
// Для HTTPS соединений настраиваем TLS (если понадобится) // Для HTTPS соединений настраиваем TLS (если понадобится)
if proxyConfig.UseHTTPS { if proxyConfig.ServiceHTTPSuse {
client.Transport = &http.Transport{ client.Transport = &http.Transport{
TLSClientConfig: &tls.Config{ TLSClientConfig: &tls.Config{
InsecureSkipVerify: true, // Простая настройка для внутренних соединений InsecureSkipVerify: true, // Простая настройка для внутренних соединений

View File

@@ -33,11 +33,12 @@ type Soft_Settings struct {
} }
type Proxy_Service struct { type Proxy_Service struct {
Enable bool `json:"Enable"` Enable bool `json:"Enable"`
ExternalDomain string `json:"ExternalDomain"` ExternalDomain string `json:"ExternalDomain"`
LocalAddress string `json:"LocalAddress"` LocalAddress string `json:"LocalAddress"`
LocalPort string `json:"LocalPort"` LocalPort string `json:"LocalPort"`
UseHTTPS bool `json:"UseHTTPS"` ServiceHTTPSuse bool `json:"ServiceHTTPSuse"`
AutoHTTPS bool `json:"AutoHTTPS"`
} }
func LoadConfig() { func LoadConfig() {

View File

@@ -88,7 +88,8 @@ go build -o MyApp.exe
"ExternalDomain": "git.example.ru", "ExternalDomain": "git.example.ru",
"LocalAddress": "127.0.0.1", "LocalAddress": "127.0.0.1",
"LocalPort": "3333", "LocalPort": "3333",
"UseHTTPS": false "ServiceHTTPSuse": false,
"AutoHTTPS": true
} }
], ],
"Soft_Settings": { "Soft_Settings": {
@@ -113,7 +114,8 @@ go build -o MyApp.exe
- `ExternalDomain` - внешний домен для перехвата запросов - `ExternalDomain` - внешний домен для перехвата запросов
- `LocalAddress` - локальный адрес сервиса - `LocalAddress` - локальный адрес сервиса
- `LocalPort` - порт локального сервиса - `LocalPort` - порт локального сервиса
- `UseHTTPS` - использовать HTTPS для локального подключения (true/false) - `ServiceHTTPSuse` - использовать HTTPS для подключения к локальному сервису (true/false)
- `AutoHTTPS` - автоматически перенаправлять HTTP → HTTPS (true/false)
**Пример множественных прокси:** **Пример множественных прокси:**
```json ```json
@@ -123,18 +125,35 @@ go build -o MyApp.exe
"ExternalDomain": "git.example.com", "ExternalDomain": "git.example.com",
"LocalAddress": "127.0.0.1", "LocalAddress": "127.0.0.1",
"LocalPort": "3000", "LocalPort": "3000",
"UseHTTPS": false "ServiceHTTPSuse": false,
"AutoHTTPS": true
}, },
{ {
"Enable": false, "Enable": false,
"ExternalDomain": "api.example.com", "ExternalDomain": "api.example.com",
"LocalAddress": "127.0.0.1", "LocalAddress": "127.0.0.1",
"LocalPort": "8080", "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` в консоли для перезагрузки конфигурации - Введите команду `config_reload` в консоли для перезагрузки конфигурации
- Изменения применятся к новым запросам без перезапуска сервера - Изменения применятся к новым запросам без перезапуска сервера

View File

@@ -16,7 +16,8 @@
"ExternalDomain": "git.example.ru", "ExternalDomain": "git.example.ru",
"LocalAddress": "127.0.0.1", "LocalAddress": "127.0.0.1",
"LocalPort": "3333", "LocalPort": "3333",
"UseHTTPS": false "ServiceHTTPSuse": false,
"AutoHTTPS": true
} }
], ],