Skip to content

Servidor web alternativo a Apache2 escrito en Python y asyncio para alta concurrencia, con soporte multi-PHP-FPM, SSL/TLS, hosts virtuales, logging en MongoDB y dashboard web en tiempo real.

License

Notifications You must be signed in to change notification settings

JoseLVillaronga/tech-web-server

Repository files navigation

Tech Web Server

ChatGPT Image 19 jun 2025, 22_11_08

Servidor web alternativo a Apache2 construido con Python y asyncio para alta concurrencia.

🚀 Características Principales

  • Servidor asyncio de alta concurrencia (40-300 conexiones simultáneas)
  • Virtual hosts con configuración independiente
  • Soporte PHP-FPM con múltiples versiones
  • Certificados SSL/TLS (Let's Encrypt)
  • Modo multi-puerto HTTP para máximo rendimiento
  • Soporte proxy reverso (Caddy, Nginx, Cloudflare)
  • Logging avanzado con geolocalización
  • Dashboard web de administración
  • Compresión gzip/brotli
  • Seguridad integrada

📋 Estado del Desarrollo

✅ Completado

1. Servidor Web Básico

  • Servidor asyncio en puertos personalizables (3080/3453)
  • Sistema de configuración (.env + virtual_hosts.yaml)
  • Servir archivos estáticos (HTML, CSS, JS, imágenes)
  • Detección automática de tipos MIME
  • Validación de rutas y seguridad básica

2. Virtual Hosts

  • Configuración por dominio
  • Document root independiente por virtual host
  • Detección automática por header Host
  • Soporte para múltiples dominios

3. Integración PHP-FPM

  • Cliente FastCGI personalizado
  • Soporte para PHP 7.1, 7.4, 8.2, 8.3, 8.4
  • Configuración de versión PHP por virtual host
  • Parámetros CGI completos
  • Manejo de headers HTTP
  • Ejecución de archivos PHP

4. Sistema de Logging

  • Logging de accesos (IP, ruta, user-agent, país, timestamp)
  • Integración con MongoDB
  • Geolocalización con GeoLite2 (detección LOCAL/remota)
  • Logs habilitables/deshabilitables desde .env
  • Logging dual: memoria + MongoDB persistente
  • Índices optimizados para consultas rápidas

5. Dashboard Web

  • Interfaz web de administración
  • Estadísticas en tiempo real (WebSocket)
  • Visualización de logs recientes
  • Estado de virtual hosts y PHP
  • Métricas de rendimiento
  • Distribución por países y tipos de request
  • Dashboard accesible remotamente (puerto 8000)
  • Logs históricos con filtros avanzados
  • Paginación inteligente con números de página
  • Filtros por fecha, IP, virtual host, status code
  • Búsqueda de texto en logs
  • Navegación directa por números de página
  • Diseño responsive adaptativo

6. SSL/HTTPS

  • Certificados SSL auto-firmados
  • Soporte HTTPS con SNI (Server Name Indication)
  • Configuración SSL por virtual host
  • Redirección automática HTTP → HTTPS
  • Gestión de certificados SSL
  • Integración Let's Encrypt para producción
  • Renovación automática de certificados
  • Verificación DNS para puertos no estándar

🔄 En Desarrollo

7. Funcionalidades Avanzadas

  • Compresión gzip/brotli
  • Soporte proxy reverso (Caddy, Nginx, Cloudflare)
  • Detección de IP real del cliente
  • Geolocalización con IPs reales
  • Modo multi-puerto HTTP (SSL_ENABLED=false)
  • Routing inteligente por (Host, Port)
  • Rate limiting
  • Headers de seguridad avanzados
  • WebSocket support

🎯 Estado Actual del Sistema

Sistema Completamente Funcional

El servidor web está 100% operativo con todas las funcionalidades principales implementadas:

  • 🚀 Servidor Web: Asyncio de alta concurrencia (hasta 300 conexiones)
  • 🐘 PHP-FPM: Soporte completo para múltiples versiones (7.1, 7.4, 8.2, 8.3, 8.4)
  • 🌐 Virtual Hosts: Configuración independiente por dominio
  • 🔐 SSL/HTTPS: Certificados auto-firmados con redirección automática
  • 🔄 Proxy Reverso: Compatible con Caddy, Nginx, Cloudflare (IPs reales)
  • 📊 Dashboard: Interfaz web con estadísticas y paginación inteligente
  • 📝 Logging: Sistema dual (memoria + MongoDB) con geolocalización
  • 🗄️ MongoDB: Base de datos persistente con índices optimizados
  • 🗜️ Compresión: Gzip/Brotli habilitado
  • 🔒 Seguridad: Validación de rutas y headers de seguridad

🌟 Características Destacadas

  • SSL/HTTPS Completo: Certificados auto-firmados con redirección automática
  • Dashboard Avanzado: Paginación inteligente con números de página
  • Logging Inteligente: Detecta geolocalización (LOCAL/remota) y guarda en MongoDB
  • Dashboard Remoto: Accesible desde cualquier IP en puerto 8000
  • PHP Flexible: Cada virtual host puede usar diferente versión de PHP
  • Estadísticas Avanzadas: Distribución por países, tipos de request, códigos de estado
  • Filtros Históricos: Búsqueda avanzada en logs con múltiples criterios
  • Índices Optimizados: Consultas rápidas en MongoDB para análisis histórico

📊 Dashboard Features

  • 🎯 Paginación Inteligente: Números de página adaptativos con lógica inteligente
  • 🔍 Filtros Avanzados: Por fecha, IP, virtual host, status code, método HTTP
  • 📱 Responsive Design: Se adapta perfectamente a móviles y tablets
  • ⚡ Tiempo Real: WebSocket para estadísticas en vivo
  • 📈 Métricas Visuales: Gráficos y estadísticas de rendimiento
  • 🌍 Geolocalización: Distribución de requests por países

🛠️ Instalación y Uso

Requisitos

  • Python 3.12+
  • PHP-FPM (versiones 7.1, 7.4, 8.2, 8.3, 8.4)
  • MongoDB (opcional, para logging)

Instalación

  1. Clonar el repositorio
git clone <repository-url>
cd tech-web-server
  1. Crear entorno virtual
python3 -m venv venv
source venv/bin/activate
  1. Instalar dependencias
pip install -r requirements.txt
  1. Configurar permisos PHP-FPM
# Solución permanente (recomendada)
sudo usermod -a -G www-data $USER

# Luego reiniciar sesión o ejecutar:
newgrp www-data

# Alternativa temporal (solo para desarrollo)
sudo chmod 666 /run/php/php*.sock
  1. Ejecutar el servidor
python main.py

Configuración

Archivo .env

# Servidor
SSL_ENABLED=true                     # true = SSL tradicional, false = Multi-puerto HTTP
DEFAULT_HTTP_PORT=3080
DEFAULT_HTTPS_PORT=3453
MAX_CONCURRENT_CONNECTIONS=300

# Dashboard
PORT=8000
DASHBOARD_BIND_IP=0.0.0.0

# Logging
LOGS=true
LOG_FILE_PATH=/var/log/webserver/access.log

# Proxy Reverso
PROXY_SUPPORT_ENABLED=true

# MongoDB (para logging persistente)
mongo_host=localhost
mongo_port=27017
mongo_db=tech_web_server
mongo_user=
mongo_pass=

# GeoIP (opcional)
GEOIP_DB_PATH=/var/lib/geoip/GeoLite2-Country.mmdb

# PHP-FPM
PHP_FPM_SOCKETS_71=/run/php/php7.1-fpm.sock
PHP_FPM_SOCKETS_74=/run/php/php7.4-fpm.sock
PHP_FPM_SOCKETS_82=/run/php/php8.2-fpm.sock
PHP_FPM_SOCKETS_83=/run/php/php8.3-fpm.sock
PHP_FPM_SOCKETS_84=/run/php/php8.4-fpm.sock

Virtual Hosts (config/virtual_hosts.yaml)

virtual_hosts:
  - domain: "localhost"
    port: 3080
    document_root: "./public"
    ssl_enabled: true
    ssl_redirect: true
    php_enabled: true
    php_version: "8.3"
    php_pool: "www"

  - domain: "test.local"
    port: 3080
    document_root: "./public/test"
    ssl_enabled: true
    ssl_redirect: true
    php_enabled: true
    php_version: "7.4"
    php_pool: "www"

🧪 Pruebas

Servidor funcionando

curl http://localhost:3080

PHP funcionando

curl -H "Host: test.local" http://localhost:3080/version.php

Virtual hosts

# localhost con PHP 8.3
curl -H "Host: localhost" http://localhost:3080/info.php

# test.local con PHP 7.4
curl -H "Host: test.local" http://localhost:3080/version.php

SSL/HTTPS

# Probar redirección HTTP → HTTPS
curl -v -H "Host: localhost" http://localhost:3080/

# Acceso directo HTTPS (certificado auto-firmado)
curl -k -H "Host: localhost" https://localhost:3453/

# Verificar certificado SSL
openssl s_client -connect localhost:3453 -servername localhost

Dashboard y Logging

# Acceder al dashboard
curl http://localhost:8000

# Ver estadísticas en tiempo real
curl http://localhost:8000/api/stats

# Ver logs recientes
curl http://localhost:8000/api/logs

MongoDB (verificar logs)

# Conectar a MongoDB y ver logs
mongosh
use tech_web_server
db.access_logs.find().limit(5).sort({timestamp: -1})

📁 Estructura del Proyecto

tech-web-server/
├── src/
│   ├── config/
│   │   ├── __init__.py
│   │   └── config_manager.py      # Gestión de configuración
│   ├── server/
│   │   ├── __init__.py
│   │   └── web_server.py          # Servidor principal
│   ├── php_fpm/
│   │   ├── __init__.py
│   │   ├── fastcgi_client.py      # Cliente FastCGI
│   │   └── php_manager.py         # Gestor de PHP-FPM
│   ├── logging/
│   │   ├── __init__.py
│   │   ├── logger.py              # Sistema de logging
│   │   └── geoip_manager.py       # Geolocalización
│   ├── database/
│   │   ├── __init__.py
│   │   └── mongodb_client.py      # Cliente MongoDB
│   ├── dashboard/
│   │   ├── __init__.py
│   │   ├── dashboard_server.py    # Servidor dashboard
│   │   └── static/                # Archivos estáticos dashboard
│   ├── tls/
│   │   ├── __init__.py
│   │   └── ssl_manager.py         # Gestión de certificados SSL
│   └── utils/                     # (próximo)
├── config/
│   └── virtual_hosts.yaml         # Configuración virtual hosts
├── ssl/
│   ├── certs/                     # Certificados SSL
│   └── generate_certificates.sh   # Script generación certificados
├── public/
│   ├── index.html                 # Página principal
│   ├── info.php                   # Info PHP localhost
│   └── test/
│       ├── index.html             # Página test
│       └── version.php            # phpinfo() test
├── .env                           # Variables de entorno
├── .gitignore                     # Exclusiones Git
├── requirements.txt               # Dependencias Python
├── main.py                        # Punto de entrada
└── README.md                      # Este archivo

🔧 Desarrollo

Próximos pasos

  1. SSL/TLS con Let's Encrypt
  2. Rate limiting y seguridad avanzada
  3. Optimizaciones de rendimiento
  4. Métricas avanzadas

Commits importantes

  • 0a69190 - Plataforma web completa con dashboard y logging
  • 20a8ddc - Soporte SSL/HTTPS completo con certificados
  • 3bbb6bc - Redirección automática HTTP → HTTPS
  • dc94aa0 - Paginación inteligente del dashboard

📚 Documentación Completa

🔧 Configuración y Administración

🚀 Desarrollo y Mejores Prácticas ⭐

💡 Nota Importante: La documentación de desarrollo está basada en pruebas reales con el sitio Tech-Support, donde se validó que nuestro web server es más estricto que Apache2, lo que resulta en código de mayor calidad y mejores prácticas de desarrollo.

📝 Licencia

Este proyecto está licenciado bajo la Licencia MIT - ver el archivo LICENSE para más detalles.

🤝 Contribuciones

[Instrucciones para contribuir]

About

Servidor web alternativo a Apache2 escrito en Python y asyncio para alta concurrencia, con soporte multi-PHP-FPM, SSL/TLS, hosts virtuales, logging en MongoDB y dashboard web en tiempo real.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages