Files
vServer/README.md
Falknat 752f294392 Alias WildCard
Возможность добавлять Alias по маске WildCard
2025-10-03 01:59:56 +07:00

11 KiB
Raw Blame History

🚀 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

📦 Подготовка компонентов

  1. Распакуйте архив WebServer/soft/soft.rar в папку WebServer/soft/
  2. Запустите скомпилированный файл 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.comapi.example.com, admin.example.com, test.example.com
  • example.*example.com, example.ru, example.org
  • *example.comtest-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 Сертификаты

Установка сертификата

  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-сертификатов: достаточно одного сертификата в папке основного домена для всех поддоменов! 🌟