🚀 vServer - Функциональный веб-сервер на Go
Функциональный веб-сервер с поддержкой HTTP/HTTPS, MySQL, PHP и веб-админкой
👨💻 Автор: Суманеев Роман
🌐 Сайт: voxsel.ru
📞 Контакт: VK
🎯 Возможности
🌐 Веб-сервер
- ✅ HTTP/HTTPS сервер с поддержкой SSL сертификатов
- ✅ Proxy сервер для проксирования запросов
- ✅ PHP сервер со встроенной поддержкой PHP 8
- ✅ Статический контент для размещения веб-сайтов
- ✅ vAccess - система контроля доступа для сайтов и прокси
🗄️ База данных
- ✅ MySQL сервер с полной поддержкой
🔧 Администрирование
- ✅ Веб-админка на порту 5555 с мониторингом
- ✅ Консольное управление через командную строку
- ✅ Логирование всех операций
- ✅ Конфигурация через JSON файлы
🏗️ Архитектура
vServer/
├── 🎯 main.go # Точка входа
│
├── 🔧 Backend/ # Основная логика
│ │
│ ├── admin/ # | 🎛️ Веб-админка (порт 5555) |
│ ├── config/ # | 🔧 Конфигурационные файлы Go |
│ ├── tools/ # | 🛠️ Утилиты и хелперы |
│ └── WebServer/ # | 🌐 Модули веб-сервера |
│
├── 🌐 WebServer/ # Веб-контент и конфигурация
│ │
│ ├── cert/ # | 🔐 SSL сертификаты |
│ ├── soft/ # | 📦 MySQL и PHP |
│ ├── tools/ # | 📊 Логи и инструменты |
│ └── www/ # | 🌍 Веб-контент |
│
└── 📄 go.mod # Go модули
🚀 Установка и запуск
🔨 Сборка проекта
go build -o MyApp.exe
📦 Подготовка компонентов
- Распакуйте архив
WebServer/soft/soft.rar
в папкуWebServer/soft/
- Запустите скомпилированный файл
MyApp.exe
🔑 Важно: Пароль MySQL по умолчанию -
root
📦 Готовый проект для пользователя
Для работы приложения необходимы только:
- 📄
MyApp.exe
- исполняемый файл - 📁
WebServer/
- папка с конфигурацией и ресурсами
💡 Папка
Backend/
и файлыgo.mod
,main.go
и т.д. нужны только для разработки
⚙️ Конфигурация
Настройка через WebServer/config.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": "192.168.1.6",
"php_port": 8000, "php_host": "localhost",
"admin_port": "5555", "admin_host": "localhost"
}
}
Основные параметры:
Site_www
- настройки веб-сайтовProxy_Service
- конфигурация прокси-сервисовSoft_Settings
- порты и хосты сервисов (MySQL, PHP, админка)
🌐 Alias с поддержкой Wildcard
Для сайтов поддерживается wildcard (*
) в алиасах:
{
"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)
Пример множественных прокси:
"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
- ✅ Кастомные ошибки - редиректы или страницы ошибок
📝 Пример конфигурации
# Разрешаем админку только с локальных 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 Сертификаты
Установка сертификата
- Откройте каталог
WebServer/
- Создайте папку
cert/
(если её нет) - Создайте папку с именем вашего домена или IP-адреса
- Поместите в неё файлы сертификатов с точными именами:
certificate.crt private.key ca_bundle.crt
- Сертификат будет автоматически загружен при запуске сервера
📁 Структура сертификатов
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-сертификатов: достаточно одного сертификата в папке основного домена для всех поддоменов! 🌟