# 🚀 vServer - Функциональный веб-сервер на Go
> Функциональный веб-сервер с поддержкой HTTP/HTTPS, MySQL, PHP и веб-админкой
**👨💻 Автор:** Суманеев Роман
**🌐 Сайт:** [voxsel.ru](https://voxsel.ru)
**📞 Контакт:** [VK](https://vk.com/felias)
## 🎯 Возможности
### 🌐 Веб-сервер
- ✅ **HTTP/HTTPS** сервер с поддержкой SSL сертификатов
- ✅ **Proxy сервер** для проксирования запросов
- ✅ **PHP сервер** со встроенной поддержкой PHP 8
- ✅ **Статический контент** для размещения веб-сайтов
- ✅ **vAccess** - система контроля доступа для сайтов и прокси
### 🗄️ База данных
- ✅ **MySQL сервер** с полной поддержкой
### 🔧 Администрирование
- ✅ **GUI Админка** - Wails desktop приложение с современным интерфейсом
- ✅ **Управление сервисами** - запуск/остановка HTTP, HTTPS, MySQL, PHP, Proxy
- ✅ **Редактор сайтов и прокси** - визуальное управление конфигурацией
- ✅ **vAccess редактор** - настройка правил доступа через интерфейс
## 🏗️ Архитектура
```
vServer/
├── 🎯 main.go # Точка входа основного сервера
│
├── 🔧 Backend/ # Основная логика
│ │
│ ├── admin/ # | 🎛️ GUI Админка (Wails) |
│ │ ├── go/ # | Go backend для админки |
│ │ └── frontend/ # | Современный UI |
│ │
│ ├── config/ # | 🔧 Конфигурационные файлы Go |
│ ├── tools/ # | 🛠️ Утилиты и хелперы |
│ └── WebServer/ # | 🌐 Модули веб-сервера |
│
├── 🌐 WebServer/ # Веб-контент и конфигурация
│ │
│ ├── cert/ # | 🔐 SSL сертификаты |
│ ├── soft/ # | 📦 MySQL и PHP |
│ ├── tools/ # | 📊 Логи и инструменты |
│ └── www/ # | 🌍 Веб-контент |
│
├── 📄 go.mod # Go модули
├── 🔨 build_admin.ps1 # Сборка GUI админки
└── 🚀 vSerf.exe # GUI админка (после сборки)
```
## 🚀 Установка и запуск
### 🔨 Сборка основного сервера
```powershell
./build_admin.ps1
```
Скрипт автоматически:
- Проверит/создаст `go.mod`
- Установит зависимости (`go mod tidy`)
- Проверит/установит Wails CLI
- Соберёт приложение → `vSerf.exe`
### 📦 Подготовка компонентов
1. Распакуйте архив `WebServer/soft/soft.rar` в папку `WebServer/soft/`
2. Запустите `vServer.exe` - основной сервер
3. Запустите `vSerf.exe` - GUI админка для управления
> 🔑 **Важно:** Пароль MySQL по умолчанию - `root`
### 📦 Готовый проект для пользователя
Для работы необходимы:
- 📄 `vSerf.exe` - GUI админка (опционально)
- 📁 `WebServer/` - конфигурация и ресурсы
> 💡 Папка `Backend/` и файлы `go.mod`, `main.go` нужны только для разработки
## ⚙️ Конфигурация
Настройка через `WebServer/config.json`:
```json
{
"Site_www": [
{
"name": "Локальный сайт",
"host": "127.0.0.1",
"alias": ["localhost"],
"status": "active",
"root_file": "index.html",
"root_file_routing": true
}
],
"Proxy_Service": [
{
"Enable": true,
"ExternalDomain": "git.example.ru",
"LocalAddress": "127.0.0.1",
"LocalPort": "3333",
"ServiceHTTPSuse": false,
"AutoHTTPS": true
}
],
"Soft_Settings": {
"mysql_port": 3306, "mysql_host": "127.0.0.1",
"php_port": 8000, "php_host": "localhost",
"proxy_enabled": true
}
}
```
**Основные параметры:**
- `Site_www` - настройки веб-сайтов
- `Proxy_Service` - конфигурация прокси-сервисов
- `Soft_Settings` - порты и хосты сервисов (MySQL, PHP, proxy_enabled)
### 🌐 Alias с поддержкой Wildcard
Для сайтов поддерживается wildcard (`*`) в алиасах:
```json
{
"alias": [
"*.test.ru", // Все поддомены voxsel.ru
"*.test.com", // Все поддомены voxsel.com
"test.com", // Точное совпадение
"api.*" // api с любой зоной
],
"host": "test.ru"
}
```
**Примеры работы wildcard:**
- `*.example.com` → `api.example.com`, `admin.example.com`, `test.example.com` ✅
- `example.*` → `example.com`, `example.ru`, `example.org` ✅
- `*example.com` → `test-example.com`, `my-example.com` ✅
- `*` → любой домен ✅ (осторожно!)
- `example.com` → только `example.com` ✅ (без wildcard)
### 🔄 Прокси-сервер
Прокси-сервер позволяет перенаправлять внешние запросы на локальные сервисы.
**Параметры Proxy_Service:**
- `Enable` - включить/отключить прокси (true/false)
- `ExternalDomain` - внешний домен для перехвата запросов
- `LocalAddress` - локальный адрес сервиса
- `LocalPort` - порт локального сервиса
- `ServiceHTTPSuse` - использовать HTTPS для подключения к локальному сервису (true/false)
- `AutoHTTPS` - автоматически перенаправлять HTTP → HTTPS (true/false)
**Пример множественных прокси:**
```json
"Proxy_Service": [
{
"Enable": true,
"ExternalDomain": "git.example.com",
"LocalAddress": "127.0.0.1",
"LocalPort": "3000",
"ServiceHTTPSuse": false,
"AutoHTTPS": true
},
{
"Enable": false,
"ExternalDomain": "api.example.com",
"LocalAddress": "127.0.0.1",
"LocalPort": "8080",
"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` в консоли для перезагрузки конфигурации
- Изменения применятся к новым запросам без перезапуска сервера
## 🔒 vAccess - Система контроля доступа
vServer включает гибкую систему контроля доступа **vAccess** для сайтов и прокси-сервисов.
### 📁 Расположение конфигураций
**Для сайтов:**
```
WebServer/www/{host}/vAccess.conf
```
**Для прокси:**
```
WebServer/tools/Proxy_vAccess/{domain}_vAccess.conf
```
### ⚙️ Основные возможности
- ✅ **IP-фильтрация** - разрешение/блокировка по IP адресам
- ✅ **Контроль путей** - ограничение доступа к определённым директориям
- ✅ **Фильтрация файлов** - блокировка по расширениям (*.php, *.exe)
- ✅ **Исключения** - гибкие правила с exceptions_dir
- ✅ **Кастомные ошибки** - редиректы или страницы ошибок
### 📝 Пример конфигурации
```conf
# Разрешаем админку только с локальных IP
type: Allow
path_access: /admin/*, /api/admin/*
ip_list: 127.0.0.1, 192.168.1.100
url_error: 404
# Блокируем опасные файлы в uploads
type: Disable
type_file: *.php, *.exe, *.sh
path_access: /uploads/*
url_error: 404
```
### 📚 Документация
Подробная документация по vAccess:
- **Для сайтов:** см. `WebServer/www/{host}/vAccess.conf` (примеры в файле)
- **Для прокси:** см. `WebServer/tools/Proxy_vAccess/README.md`
## 📝 Логирование
Все логи сохраняются в `WebServer/tools/logs/`:
- 🌐 `logs_http.log` - HTTP запросы (включая прокси P-HTTP)
- 🔒 `logs_https.log` - HTTPS запросы (включая прокси P-HTTPS)
- 🔄 `logs_proxy.log` - Ошибки прокси-сервера
- 🗄️ `logs_mysql.log` - MySQL операции
- 🐘 `logs_php.log` - PHP ошибки
- ⚙️ `logs_config.log` - Конфигурация
- 🔐 `logs_vaccess.log` - Контроль доступа для сайтов
- 🔐 `logs_vaccess_proxy.log` - Контроль доступа для прокси
## 🔐 SSL Сертификаты
### Установка сертификата
1. Откройте каталог `WebServer/`
2. Создайте папку `cert/` (если её нет)
3. Создайте папку с именем вашего домена или IP-адреса
4. Поместите в неё файлы сертификатов с **точными** именами:
```
certificate.crt
private.key
ca_bundle.crt
```
5. Сертификат будет автоматически загружен при запуске сервера
### 📁 Структура сертификатов
```
WebServer/
└── cert/
├── example.com/ # Основной домен
│ ├── certificate.crt
│ ├── private.key
│ └── ca_bundle.crt
│
└── sub.example.com/ # Поддомен (опционально)
├── certificate.crt
├── private.key
└── ca_bundle.crt
```
### 🎯 Работа с поддоменами
**Важно:** Если для поддомена не создана отдельная папка в `cert/`, то автоматически будет использоваться сертификат родительского домена.
**Примеры:**
- ✅ Запрос к `example.com` → использует сертификат из `cert/example.com/`
- ✅ Запрос к `sub.example.com` (папка существует) → использует `cert/sub.example.com/`
- ✅ Запрос к `sub.example.com` (папка НЕ существует) → использует `cert/example.com/`
**Это удобно для wildcard-сертификатов:** достаточно одного сертификата в папке основного домена для всех поддоменов! 🌟