Generador de Virtual Host de Apache
Elige el tipo de sitio, introduce tu dominio y obtén un archivo VirtualHost de Apache completo y comentado. Gestiona HTTPS con Let's Encrypt o tu propio certificado, redirecciones de HTTP a HTTPS y de www, PHP-FPM, proxy inverso con WebSockets, enrutamiento de aplicaciones de una sola página, compresión, caché y cabeceras de seguridad, además de los comandos exactos para servidores Debian/Ubuntu o basados en RHEL.
Última actualización:
Configuración generada
Cómo usar Generador de Virtual Host de Apache
- Elige el tipo de sitio: archivos estáticos, PHP mediante PHP-FPM, un proxy inverso hacia un servidor de aplicaciones o una aplicación de una sola página.
- Introduce el ServerName y los alias, la raíz de documentos o la URL del backend, y elige cómo tratar www.
- Configura HTTPS con Let's Encrypt o tu propio certificado, y elige la redirección de HTTP a HTTPS, HTTP/2 y HSTS.
- Elige las opciones de rendimiento y seguridad y añade las redirecciones personalizadas que necesites.
- Copia la configuración o los comandos de instalación, guarda el archivo, ejecuta la prueba de configuración y recarga Apache.
Cómo elige Apache un virtual host
En cada solicitud, Apache mira primero la dirección IP y el puerto, y luego el nombre de host:
- Todos los bloques
<VirtualHost>cuya dirección y puerto coinciden con la conexión (por ejemplo,*:443) son candidatos. - Entre ellos, gana el primero cuyo
ServerNameoServerAliascoincide con la cabecera Host de la solicitud. - Si ningún nombre coincide, se usa como predeterminado el primer candidato según el orden de carga. Por eso el
000-default.confde serie suele responder a nombres desconocidos en Debian y Ubuntu.
Módulos que usa la configuración generada
| Módulo | Necesario para | Directivas clave |
|---|---|---|
mod_ssl | HTTPS | SSLEngine, SSLCertificateFile, SSLProtocol |
mod_http2 | HTTP/2 | Protocols h2 http/1.1 |
mod_proxy + mod_proxy_http | Proxy inverso | ProxyPass, ProxyPassReverse, ProxyPreserveHost |
mod_proxy_fcgi | PHP-FPM | SetHandler "proxy:unix:…|fcgi://localhost" |
mod_headers | Cabeceras de seguridad, HSTS, X-Forwarded-Proto | Header always set, RequestHeader set |
mod_deflate + mod_filter | Compresión | AddOutputFilterByType DEFLATE |
mod_expires | Caché del navegador | ExpiresActive, ExpiresByType |
mod_dir | Aplicaciones de una sola página | FallbackResource /index.html |
mod_alias | Redirecciones | Redirect, RedirectMatch |
Lista de comprobación para resolver problemas
- Ejecuta siempre la prueba de configuración (
apache2ctl configtestoapachectl configtest) y recarga en lugar de reiniciar para no cortar las conexiones abiertas. - 403 Forbidden: el usuario de Apache (
www-dataoapache) necesita permiso de lectura en los archivos y de ejecución en cada carpeta superior, y el bloque<Directory>debe contenerRequire all granted. En sistemas con SELinux, revisa también el contexto de los archivos conls -Z. - 503 Service Unavailable detrás de un proxy: el backend no está en ejecución o escucha en otra dirección. Pruébalo en el servidor con
curl -I http://127.0.0.1:3000/y lee el registro de errores del sitio. - Se descarga el código PHP en lugar de ejecutarse: falta el manejador de PHP; comprueba la ruta del socket de PHP-FPM con
ls /run/php/y que mod_proxy_fcgi esté activado. - Bucle de redirección detrás de Cloudflare o un balanceador de carga: puede que el proxy se comunique con Apache por HTTP, así que la redirección de HTTP a HTTPS vuelve a activarse. Usa la redirección HTTPS del propio proxy o TLS completo de extremo a extremo.
Preguntas frecuentes
¿Dónde se guardan los archivos de virtual host de Apache?
En Debian y Ubuntu, guarda el archivo en /etc/apache2/sites-available/ con extensión .conf y actívalo con sudo a2ensite nombre.conf. En RHEL, Rocky, AlmaLinux y Fedora, colócalo en /etc/httpd/conf.d/ con extensión .conf; todos los archivos .conf de esa carpeta se cargan automáticamente. Después, recarga Apache.
¿Cómo redirijo HTTP a HTTPS en Apache?
Crea un VirtualHost en el puerto 80 para tu dominio que solo contenga Redirect permanent / https://example.com/ y coloca el sitio real en el VirtualHost del puerto 443. Redirect conserva el resto de la ruta, así que /about va a https://example.com/about.
¿Cómo configuro Apache como proxy inverso?
Activa mod_proxy y mod_proxy_http, y luego añade ProxyPass / http://127.0.0.1:3000/ y ProxyPassReverse / http://127.0.0.1:3000/ dentro del VirtualHost. ProxyPreserveHost On transmite el nombre de host original, y RequestHeader set X-Forwarded-Proto https indica a la aplicación que el visitante usó HTTPS.
¿Cómo uso PHP-FPM con Apache?
Activa mod_proxy y mod_proxy_fcgi y envía los archivos .php al socket de PHP-FPM con un bloque FilesMatch que contenga SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost". Así Apache puede usar el MPM event y HTTP/2, que no funcionan con mod_php.
¿Por qué apachectl configtest falla con un error de certificado SSL?
SSLCertificateFile y SSLCertificateKeyFile deben apuntar a archivos que existan cuando Apache se inicia. Obtén primero el certificado, por ejemplo con sudo certbot certonly --apache -d example.com, o desactiva temporalmente HTTPS en el generador, despliega, obtén el certificado y luego activa HTTPS.
¿Cuál es la diferencia entre ServerName y ServerAlias?
ServerName es el nombre de host principal del virtual host y se usa cuando Apache construye URL que apuntan a sí mismo. ServerAlias enumera nombres adicionales, como www.example.com, a los que responde el mismo VirtualHost. Apache elige el virtual host cuyo ServerName o ServerAlias coincide con la cabecera Host de la solicitud.
¿Se sube algo cuando uso este generador?
No. La configuración se crea en tu navegador, y tus ajustes solo se recuerdan en el almacenamiento local de este navegador.
¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?
Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.