Servidor web alternativo a Apache2 construido con Python y asyncio para alta concurrencia.
- Servidor asyncio de alta concurrencia (40-300 conexiones simultáneas)
- Virtual hosts con configuración independiente
- Soporte PHP-FPM con múltiples versiones
- Rewrite Engine para aplicaciones MVC (compatible con Apache .htaccess)
- 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
- 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
- Configuración por dominio
- Document root independiente por virtual host
- Detección automática por header Host
- Soporte para múltiples dominios
- 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
- 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
- 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
- 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
- Motor de rewrite basado en configuración YAML
- Soporte para patrones regex
- Condiciones (file_not_exists, dir_not_exists)
- Flags (QSA - Query String Append, L - Last)
- Grupos capturados ($1, $2, etc.)
- Configuración por virtual host
- Compatible con aplicaciones MVC
- Manejo de errores 404 personalizados
- Integración con PHP-FPM
- 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
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
- 🔄 Rewrite Engine: URL rewriting para aplicaciones MVC (compatible con Apache)
- 🔐 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
- SSL/HTTPS Completo: Certificados auto-firmados con redirección automática
- Rewrite Engine: URL rewriting para aplicaciones MVC (compatible con Apache)
- 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
- 🎯 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
- Python 3.12+
- PHP-FPM (versiones 7.1, 7.4, 8.2, 8.3, 8.4)
- MongoDB (opcional, para logging)
- Clonar el repositorio
git clone <repository-url>
cd tech-web-server- Crear entorno virtual
python3 -m venv venv
source venv/bin/activate- Instalar dependencias
pip install -r requirements.txt- 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- Ejecutar el servidor
python main.py# 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.sockvirtual_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"
# Rewrite rules para aplicaciones MVC
rewrite_rules:
- pattern: "^(.*)$"
target: "/index.php"
query_string: "url=$1"
conditions:
- type: "file_not_exists"
- type: "dir_not_exists"
flags: ["QSA", "L"]curl http://localhost:3080curl -H "Host: test.local" http://localhost:3080/version.php# 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# 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# 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# Conectar a MongoDB y ver logs
mongosh
use tech_web_server
db.access_logs.find().limit(5).sort({timestamp: -1})# Probar ruta MVC que no existe como archivo
curl -v http://localhost:3080/usuarios/123
# Esperado: Se reescribe a /index.php?url=/usuarios/123
# Probar ruta con parámetros
curl -v "http://localhost:3080/servicios?foo=bar"
# Esperado: Se reescribe a /index.php?url=/servicios&foo=bar
# Probar ruta 404 personalizada
curl -v http://localhost:3080/ruta-no-existe
# Esperado: Se renderiza página 404 personalizada
# Probar que archivos estáticos se sirven normalmente
curl -I http://localhost:3080/public/style.css
# Esperado: Status 200 (no se reescribe)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
│ ├── rewrite/
│ │ ├── __init__.py
│ │ ├── conditions.py # Condiciones de rewrite
│ │ ├── rewrite_rule.py # Reglas de rewrite
│ │ └── rewrite_engine.py # Motor de rewrite
│ ├── 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
├── tests/
│ └── test_rewrite_engine.py # Tests del rewrite engine
├── .env # Variables de entorno
├── .gitignore # Exclusiones Git
├── requirements.txt # Dependencias Python
├── main.py # Punto de entrada
└── README.md # Este archivo
- SSL/TLS con Let's Encrypt
- Rate limiting y seguridad avanzada
- Optimizaciones de rendimiento
- Métricas avanzadas
0a69190- Plataforma web completa con dashboard y logging20a8ddc- Soporte SSL/HTTPS completo con certificados3bbb6bc- Redirección automática HTTP → HTTPSdc94aa0- Paginación inteligente del dashboard- Nuevo - Rewrite Engine para aplicaciones MVC (URL rewriting compatible con Apache)
- Configuración inicial
- Configuración de virtual hosts
- 🔄 Rewrite Engine (URL Rewriting) - Motor de rewrite para aplicaciones MVC
- 🔐 Certificados SSL/Let's Encrypt - Guía completa de SSL
- 🌐 Configuración Multi-Puerto - Modo HTTP de alto rendimiento
- 🔄 Soporte Proxy Reverso - Caddy, Nginx, Cloudflare
- Sistema de logging
- Dashboard de administración
- Instalación como servicio
- Mejores Prácticas del Web Server - Lecciones aprendidas en campo
- Patrones JavaScript Validados - Código probado y optimizado
- Guía de Troubleshooting - Soluciones a problemas comunes
💡 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.
Este proyecto está licenciado bajo la Licencia MIT - ver el archivo LICENSE para más detalles.
[Instrucciones para contribuir]
