️ ¿Qué es un servidor Apache? Guía completa para principiantes y desarrolladores

- 👤 Andrés Cruz

🇺🇸 In english

️ ¿Qué es un servidor Apache? Guía completa para principiantes y desarrolladores

Apache es uno de los servidores web más populares en la actualidad; al buscar en Google hostings tanto de pago como gratuitos veremos que todos ellos emplean Apache como servidor web.

Cuando empecé a trabajar con servidores web, Apache fue el primero con el que me topé… y también el que más dolores de cabeza me dio al principio. Pero, con el tiempo, entendí por qué sigue siendo uno de los servidores más usados del mundo: es flexible, estable y lo puedes configurar a tu gusto. En esta guía voy a contarte qué es exactamente Apache, cómo funciona y cómo lo puedes dominar con ejemplos reales que yo mismo he usado en producción y en desarrollo.

Qué es exactamente Apache y cómo funciona

Apache —o más formalmente Apache HTTP Server— es un software de servidor web que se encarga de recibir solicitudes HTTP de los usuarios y entregar de vuelta páginas, archivos, datos o lo que tu aplicación necesite. Lo puedes usar en Linux, Windows o macOS y prácticamente con cualquier lenguaje de backend.

El papel de Apache en el ecosistema web actual

Aunque hoy existen alternativas como NGINX o LiteSpeed, Apache sigue siendo muy utilizado porque es modular, fácil de extender y tremendamente configurable. Desde sistemas pequeños hasta entornos de desarrollo complejos, Apache se adapta bien.

Arquitectura y módulos: por qué Apache es tan flexible

Apache funciona a través de Módulos (mod_rewrite, mod_ssl, mod_php, etc.). Estos módulos los puedes activar o desactivar según lo que necesite tu proyecto.

Cuando activé por primera vez mod_rewrite, recuerdo tener que cambiar todos los AllowOverride None por AllowOverride All dentro de sites-available/default. Ese cambio tan simple desbloqueó las URLs amigables que necesitaba para mi proyecto.

Diferencia entre Apache, NGINX y otros servidores web

  • Apache: Muy flexible, ideal para configuraciones finas y proyectos variados.
  • NGINX: Enorme rendimiento para sitios de mucho tráfico.
  • LiteSpeed: Compatible con Apache, pero más rápido (de pago en la mayoría de casos).

Principales características del servidor Apache

Sistema modular y extensible

Puedes activar módulos como:

  • mod_ssl para HTTPS
  • mod_rewrite para URLs limpias
  • mod_security para protección
  • mod_php para ejecutar PHP

Yo he trabajado con todos estos y la ventaja es que no necesitas instalar todo el servidor de nuevo; solo habilitas lo que te haga falta.

Compatibilidad total con PHP, bases de datos y sistemas operativos

Da igual si usas PHP 5, PHP 7 o PHP 8, MySQL o MariaDB: Apache se adapta. Incluso he trabajado con múltiples versiones de PHP en Windows alternando módulos manualmente desde httpd.conf.

Rendimiento, seguridad y estabilidad

  • Estable para proyectos medianos.
  • Robusto al manejar errores.
  • Perfectamente compatible con SSL/TLS.

Cómo se configura Apache (visión general)

Archivos clave: httpd.conf, apache2.conf y .htaccess

  • En Linux: /etc/httpd/conf/httpd.conf
  • En Debian/Ubuntu: /etc/apache2/apache2.conf
  • Configuración local: .htaccess

Puertos, procesos y cómo Apache sirve las peticiones HTTP

  • Puerto 80 → HTTP
  • Puerto 443 → HTTPS
  • Usa MPMs (prefork, worker, event) para manejar procesos y rendimiento.

Errores comunes y cómo identificarlos en los logs

En más de una ocasión Apache no quiso iniciar hasta que revisé:

/var/log/httpd/error_log  
/var/log/httpd/ssl_error_log

Módulos esenciales de Apache y cómo activarlos

Activación de mod_rewrite para URLs amigables

En Linux lo activé así:

a2enmod rewrite

Luego cambié todos los AllowOverride None → AllowOverride All.

Mod_security, mod_php y otros módulos frecuentes

Dependiendo de tu entorno:

  • a2enmod php8.2
  • a2enmod ssl
  • yum install mod_ssl en Fedora/CentOS

Cómo habilitar y deshabilitar módulos según tu entorno

Con:

a2dismod <modulo>
a2enmod <modulo>

En Windows es un poco más manual; hay que editar el httpd.conf y comentar o descomentar las líneas LoadModule.

Trabajar con archivos .htaccess para controlar el comportamiento del servidor

Reescritura de URLs: reglas básicas y ejemplos reales

Este fue el primer .htaccess que probé:

RewriteEngine On
RewriteRule prueba.html http://www.google.com [R]

Cuando puse localhost/prueba.html, Apache me mandó directo a Google. ¡Magia pura para un novato!

Redirecciones permanentes, temporales y manejo de rutas

  • 301 → Permanente
  • 302 → Temporal
  • Reescrituras con expresiones regulares
  • Control total sobre rutas internas

Consejos para evitar errores en .htaccess

  • Nunca dejes espacios innecesarios.
  • Activa el rewrite en el VirtualHost.
  • Vigila los bucles infinitos.

Apache es uno de los servidores web más populares en la actualidad; al buscar en Google hostings tanto de pago como gratuitos veremos que todos ellos emplean Apache como servidor web.

Como bien debes saber, Apache está basados en módulo o componentes que son independientes y podemos configurarlos independientemente, una de estas configuraciones son los Virtual Host que permiten asignar distintos sitios web a través de dominios a una misma dirección IP.

Esta entrada veremos que son los Virtual Host y cómo emplearlos en nuestras aplicaciones web con PHP.

Los Virtual Host son una configuración muy útil al momento de desarrollar nuestras aplicaciones ya que las mismas permiten acceder fácilmente a una aplicación PHP alojada un en servidor web Apache a través de un simple dominio que configuremos en nuestra máquina o servidor.

Configurando los Virtual Host

En Linux, específicamente Fedora, debemos ingresar a la ruta:

sudo gedit /etc/httpd/conf/httpd.conf 

De nuestra carpeta en donde se encuentra alojada Apache y luego de todos los comentarios podemos ingresar algo como esto:

<VirtualHost desarrollolibre2.net>
    ServerName desarrollolibre2.net
    DocumentRoot /var/www/html/desarrollolibre
</VirtualHost>

La primera línea <VirtualHost desarrollolibre2.net> simplemente indicamos la IP (a través del dominio) del virtual host y el puerto que por defecto es el 80; también podríamos emplear una configuración como la siguiente:

<VirtualHost *:80>
    ServerName desarrollolibre2.net
    DocumentRoot /var/www/html/desarrollolibre
</VirtualHost>

El ServerName desarrollolibre2.net establece la base o raíz del dominio y con esta dirección es la que emplearemos en el navegador para accedes a nuestra aplicación.

El DocumentRoot /var/www/html/desarrollolibre establece la ubicación al directorio que en otras palabras significa el sitio a donde apunta nuestro dominio configurado con el Virtual Host.

Esto sería lo mínimo que necesitamos; existen otras directivas de configuración como ServerAdmin para especificar el correo del administrador, el alias con ServerAlias etc.

Reiniciamos los servicios de Apache con los comandos:

sudo service httpd stop sudo service httpd start

O desde la interfaz del Xampp, Wampp o cualquier otro si te encuentra en Windows:

Si intentamos ingresar al dominio anterior veremos una pantalla como la siguiente

sitio caído

¿Qué pasa con nuestro Virtual Host?

el archivo hosts tiene varias utilidades como establecer la IP del sitio para evitar pasar por el DNS, bloquear sitios etc, en nuestro caso nos interesa para indicar que el dominio en cuestión será resuelto por nuestra propia máquina; 

Virtual Hosts en Linux paso a paso

Ejemplo típico:

<VirtualHost *:80>
   ServerName midominio.net
   DocumentRoot /var/www/html/misitio
</VirtualHost>

Para ello debemos ir al archivo hosts de nuestra máquina, en Linux estará en:

 sudo gedit /etc/hosts

En el caso de Windows estará en:

C:WINDOWS\system32\drivers\etc\hosts

Agregamos el dominio anterior:

127.0.0.1 localhost.localdomain localhost ::1    localhost6.localdomain6 localhost6 127.0.0.1 desarrollolibre2.net

Yo configuré muchos de estos en Fedora para entornos de desarrollo y funcionan de maravilla.

Virtual Hosts en Windows (XAMPP, UwAmp)

En Windows debes editar el archivo:

C:\WINDOWS\System32\drivers\etc\hosts

Ahora, si intentamos navegar nuevamente, veremos una pantalla como la siguiente, la cual corresponde al sitio web de DesarrolloLibre que tengo alojado en local:

sitio activo

Gestión de logs en Apache: acceso, errores y logs personalizados

¿Qué son los logs?

Los logs de las aplicaciones son registros generados por las aplicaciones en base a una serie de eventos registrados en un tiempo particular; son empleados para registrar datos como:

  • Errores de la aplicación.
  • Usuarios que acceden a la aplicación.
  • Tiempo en determinado módulo de la aplicación.

Entre otros parámetros; los logs son herramientas importantes para detectar posibles problemas, errores, bug en la aplicación.

Los logs en Apache

Los logs de Apache pueden configurarse fácilmente utilizando la directiva CustomLog dentro del VirtualHost utilizando la siguiente sintaxis:

CustomLog <ruta>/<archivo>.<extensión> formato

En donde:

  • <ruta>: Es la localización del <archivo>; es decir, en donde está referenciado el <archivo>.
  • <archivo>: Es el nombre que le coloque al log.
  • <extension>: (Opcional) Es la extensión del archivo.
  • <formato>: Es la configuración del log los cuales pueden ser:
    • combined: %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"
    • common: %h %l %u %t \"%r\" %>s %b

En donde cada uno de los "format string" significa:

Format StringDescripción
%hEs el host que accede al servidor.
%lEs el protocolo de identificación del usuario RFC 1413.
%uEs el nombre del usuario (comúnmente la salida será un guión a no ser que se trate de un usuario autenticado en el sistema).
%tEs la fecha incluyendo hora y UTC.
%rEs la solicitud realizada por el usuario.
%>sEs el código de respuesta de estado del protocolo HTTP.
%{Referer}iEs la URI de referencia al recurso.
%{User-agent}iEs el user-agent del usuario.

La tabla de parámetros basada en la documentación oficial de Apache; mencionando algunos de los "Format String" más utilizados:

Format StringDescripción
%%Es el signo de porcentaje.
%aEs la dirección IP remota.
%AEs la dirección IP local.
%BEs el Tamaño del "response" (respuesta) en bytes incluyendo la cabecera HTTP.
%bEs el Tamaño del "response" (respuesta) en bytes incluyendo la cabecera HTTP, en formato CLF.
%{VARNAME}CEs el contenido de la cookie en el request (petición) enviada al servidor.
%DEs el tiempo tomado por el servidor en dar una respuesta.
%{VARNAME}eNos da el contenido de la variable.
%fEs el nombre del archivo.
%hEs el Host Remoto.
%HEs el protocolo.
%kEs el numero de "keepalive" manejadas en la conexion.
%mEs el método de petición.
%pEs el puerto canónico del servidor de servicio de la petición.
%qEs el query string.
%uEs el nombre del usuario.
%UEs la URL de petición, no incluye ningún query string.

Además podemos crear un formato de log personalizado utilizando la directiva "LogFormat"; como veremos en la siguiente sección.

Múltiples logs de acceso en Apache

Apache permite manejar múltiples logs de accesos; para crear un log desde Apache basta con especificar tantas directivas CustomLog como logs se deseen.

Creando un log con la directiva CustomLog en Apache

Por ejemplo, las siguientes directivas crean tres logs de accesos.

  • El primero contiene información básica CLF.
  • El segundo contiene información sobre los recursos accedidos y el usuario.
  • el último "CustomLog" Muestra el agente utilizado.
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common
CustomLog logs/referer_log "%{Referer}i -> %U"
CustomLog logs/agent_log "%{User-agent}i"

Los logs de Condiciones en Apache

Puede resultar conveniente excluir información de los logs; esto lo podemos hacer fácilmente utilizando variables de entorno (environment variables). primero debemos setear la variable de entorno para indicar que la solicitud cumple con ciertas condiciones; Esto se logra generalmente con <SetEnvIf. Entonces la cláusula env= de la directiva CustomLog; se usa para incluir o excluir las solicitudes que se establece la variable de entorno.

Ejemplo de logs de Condiciones en Apache

SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog
SetEnvIf Request_URI "^/robots\.txt$" dontlog
CustomLog logs/access_log common env=!dontlog

Otro ejemplo consiste en mandar a un log diferente las peticiones de los que "hablan inglés" a un archivo diferente.

SetEnvIf Accept-Language "en" english CustomLog logs/english_log common env=english
CustomLog logs/non_english_log common env=!english

Muy útil para analizar tráfico y depurar.

Filtrar o excluir solicitudes mediante SetEnvIf

Ejemplo real que usé:

SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog
CustomLog logs/access_log common env=!dontlog

Cómo configurar HTTPS y certificados SSL en Apache

Cómo sabrás, HTTPS es la versión segura de HTTP y es empleada en todo tipo de aplicaciones web como Twitter, Gmail, diferentes sistemas bancarios, etc; permite agregar una capa de seguridad a las aplicaciones a través de un cifrado cuyo soporte es un certificado que permite “certificar” la identidad de ese ente (computador, empresa o persona).

Claves privadas y públicas en los certificados

key

Estos certificados contienen una clave pública y otra privada; la clave pública es la que generamos nosotros mediante el CSR y que es validada por otro servidor (esa sería la idea y que no nos autofirmemos la petición).

La clave privada es simplemente una contraseña de seguridad que generamos en posteriores pasos y se queda en el servidor y no debe ser compartida.

Para poder generar la clave privada y pública es necesitaremos algunas herramientas adicionales y así poder emplear el HTTPS en nuestra web que veremos a continuación.

Módulo mod_ssl de Apache

El mod_ssl no es más que un módulo para Apache que provee soporte para SSL y debemos instalar para poder emplear HTTPS en nuestra web.

En las máquinas que empleen los repositorios RPM como Fedora podemos instalar el módulo mod_ssl de Apache con el siguiente comando:

yum -y install mod_ssl

Generando el certificado SSL

Con nuestro módulo para el soporte SSL instalado, podemos comenzar a generar el certificado para nuestro sitio.

Abrimos la consola en linux y nos ubicamos en cualquier directorio (más adelante los ubicamos en la ruta especificada); con esto podemos ir al siguiente paso.

Generación de la clave privada

Primero debemos crear la clave privada que tendrá un longitud de 1024 caracteres (existen otros parámetros como -des3 para especificar un algoritmo de triple cifrado pero estos son opcionales):

openssl genrsa -out ca.key 1024

Generación de CSR

El CSR (certificate Signing Request) es un archivo que contiene información sobre la persona o empresa (localidad, dominio...); con este archivo podemos solicitar a otro ente certificado que lo firme y de esta forma que los datos que suministramos son correctos y de esta forma se arma una cadena de certificaciones y nuestro ente pasa a ser certificado.

openssl req -new -key ca.key -out ca.csr

Cuando ejecutes el comando anterior, verás que solicita una serie de información en donde la más importante es la referente al dominio; viene siendo nuestra clave pública y es la que debemos compartir con otro servidor (en circunstancias normales) para su validación.

Autofirmado el certificado

Aunque no sería lo ideal para alguna aplicación en producción, nos autofirmaremos el certificado y se establece el período de validez que podremos a 365 días:

openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt

Reubicar los archivos anteriores

Finalmente, debemos reubicar los archivos generados anteriormente a su ubicación final en nuestros directorios de Apache:

mv ca.crt /etc/pki/tls/certs
mv ca.key /etc/pki/tls/private/ca.key
mv ca.csr /etc/pki/tls/private/ca.csr

Activando el SSL en Apache

Ahora debemos ubicar el archivo ssl.conf que posiblemente esté ubicado en /etc/httpd/conf.d/ssl.conf y debemos buscar las siguientes líneas:

SSLCertificateFile /etc/pki/tls/certs/localhost.crt 
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

Y cambiarlas por:

SSLCertificateFile /etc/pki/tls/certs/ca.crt 
SSLCertificateKeyFile /etc/pki/tls/private/ca.key

Verificamos que Apache escuche los puertos correspondientes (SSL trabaja con el puerto 443 y el puerto 80 es el empleado por defecto por Apache) en el archivo /etc/httpd/conf/httpd.conf deben estar presente y descomentadas las siguientes líneas:

Listen 80
Listen 443

Configurando el VirtualHost en Apache

Ahora ubicamos el archivo /etc/httpd/conf/httpd.conf: y agregamos/modificamos el VirtualHost del sitio:

<VirtualHost crm.net>
    DocumentRoot /var/www/html/crm
    ServerName crm.net
</VirtualHost>

Reiniciamos el servicio de apache:

sudo service httpd stop
sudo service httpd start

O:

service httpd restart

Y si todo nos ha ido bien; veremos un sitio como el siguiente:

APache sSL no seguro

Ese error es debido a que la firma es autogenerada y por lo tanto es considerado como un sitio poco confiable.

Posible error:

Si Apache no inicia, podemos verificar el log de apache, en mi caso verifiqué el log ubicado en:

gedit /var/log/httpd/ssl_error_log

Y al final del archivo había un error como el siguiente:

Permission denied: AH02574: Init: Can't open server private key file /etc/pki/tls/private/ca.key

Este error se debe a la forma en que fueron creados estos archivos (fuera del directorio de Apache); en Linux cada archivo tiene una serie de información que llaman contexto, según cómo esté estructurada esta información es posible que ciertos procesos no se ejecuten correctamente o simplemente denieguen la ejecución (como nos está pasando); debemos restaurar el contexto de los archivos para que puedan ejecutarse, para eso debemos emplear el siguiente comando para cada uno de los archivos copiados:

sudo restorecon -RvF /etc/pki/tls/private sudo restorecon -RvF /etc/pki/tls/certs

Debes de tener presente que el sistema también tenga los permisos necesarios para ejecutarse.

Mod_ssl y requisitos para activar HTTPS

En Fedora/CentOS:

yum -y install mod_ssl

Crear claves, CSR y certificados autofirmados con OpenSSL

Yo generé un certificado autofirmado así:

openssl genrsa -out ca.key 1024
openssl req -new -key ca.key -out ca.csr
openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt

Luego moví los archivos a:

/etc/pki/tls/certs
/etc/pki/tls/private

Errores habituales con SSL (incluyendo SELinux) y cómo solucionarlos

Apache una vez se negó a iniciar porque SELinux bloqueaba mi clave privada:

Permission denied: AH02574: Init: Can't open server private key file

Lo arreglé con:

sudo restorecon -RvF /etc/pki/tls/private
sudo restorecon -RvF /etc/pki/tls/certs

Apache en entornos de desarrollo: PHP, MySQL y múltiples versiones

Apache en entornos de desarrollo: PHP, MySQL y múltiples versiones

Cuándo vamos a desarrollar aplicaciones web recientemente o mejor dicho en los últimos (pocos) años desde el surgimiento de PHP 7 se nos ha complicado un poco más la vida a los desarrolladores ya que PHP 5 está vigente, en sus versión 5.6, 5.7 en adelante, entonces hay framework, CMD u otros sistemas en PHP que funcionan con una versión u otra de PHP; por ejemplo las versiones más antiguas de Codeigniter funcionan es con PHP en su versión 5, con PHP 7 no funcionan, por el contrario Laravel funciona con PHP en su versión 7.1 en adelante y por lo tanto la versión de PHP 5 no funciona para trabajar con este framework; esto por comentar unos casos en particulares, pero hay muchos más.

Todo esto como puedes imaginar nos trae más complicaciones a nosotros ya que tenemos que ver cómo hacemos para trabajar con varias versiones de PHp que ha veces y en determinados casos hasta trabajar con alguna de las muchas versiones de PHP 5 nos trae problemas; aquí podemos hacer varias cosas; ya teniendo instalado nuestro servidor Web en Windows, entiéndase WAMPP u otro servidor web similar, podemos descargar las versiones de PHP que queramos y copiarlas en los directorio y luego nos vamos al httpd.conf y copiar una línea similar a esta:

LoadModule php7_module c:\php7\libphp7.so

Entonces, para variar de una versión web a otra tenemos que hacer este cambio o switch nosotros mismos de manera manual:

Usar PHP 5:

LoadModule php5_module c:\php5\libphp5.so
#LoadModule php7_module c:\php7\libphp7.so

Usar PHP 7:

#LoadModule php5_module c:\php5\libphp5.so
LoadModule php7_module c:\php7\libphp7.so

Lo que es algo molesto pero nos puede funcionar; la otra opción que tenemos es instalar múltiples versiones de XAMPP o lo que usemos por servidores webs en directorios distintos claro está y tener todo doble lo que es una solución más automatizada pero más "fea" al tener la misma app instalada múltiples veces.

UwAmp para tener varias instancias de PHP instaladas en nuestra PC

Recientemente encontré un servidor web que ayuda mucho en este proceso de tener instalados dos o más versiones de PHP en nuestro servidor web, claro este viene en reemplazo de XAMPP ya que nos ofrece lo mismo, pero la posibilidad de pasarnos entre una versión de PHP a otra mediante un campo de selección; así de fácil.

UwAmp es Ideal para pasarnos de PHP5 a PHP7 sin problemas, sin instalar múltiples instancias de WAMPP, XAMPP u otro servidor web similar y sin la necesidad de copiar múltiples instancias de PHP en nuestro servidor web y cambiarlas manualmente; simplemente tenemos que cambiar la versión desde la misma interfaz del servidor web que nos ofrece:

interfaz uwamp

Para descargar el servidor web que hacemos mención nos vamos a UwAmp lo instalamos como todo en Windows (siguiente, siguiente, siguiente...) y estamos listos para emplearlo

Activar el mod_rewrite en UwAmp

El mod_rewrite es un modo que está disponible en Apache que nos sirve para crear URL dinámicas que en otras palabras son las URL limpias amigables con el SEO que empleamos en nuestras aplicaciones y que configuramos en nuestro .htacces para hacer múltiples operaciones; por ejemplo es el empleado por CodeIgniter para hacer limpias nuestras URL y que debes saber como activar en UwAmp dicho módulo; lo primero que debemos hacer es ir al archivo de configuraciones de Apache httpd.conf en:

C:\UwAmp\bin\apache\conf\httpd.conf

O donde tengas instalado el UwAmp y descomentar el siguiente módulo:

LoadModule rewrite_module "C:/UwAmp/bin/apache/modules/mod_rewrite.so"

A:

#LoadModule rewrite_module "C:/UwAmp/bin/apache/modules/mod_rewrite.so"

Y agregamos la siguiente línea; por donde estan los tags VirtualHost:

<Directory "C:\UwAmp\www">
Options Indexes FollowSymLinks MultiViews
AllowOverride FileInfo Options
Order allow,deny
allow from all
</Directory>

Y con esto tenemos listo nuestro servidor web para empezar a trabajar:

Instalar varias versiones de PHP en el servidor web forma 1

Tenemos dos formas de hacerlo, nos podemos ir al site oficial y descargar la versión de PHP que queramos en Download PHP; seleccionamos la versión que queramos, la descomprimimos y luego la copiamos en:

C:\UwAmp\bin\php

versiones PHP en uwamp

Luego probablemente tengamos que agregar el módulo en nuestro httpd.conf para que funcione en caso de que el software no lo haga por nosotros.

Instalar varias versiones de PHP en el servidor web forma 2

La otra opción que tenemos que es mucho más automatizada es emplear los repositorios que trae UwAmp; dando clic en este pequeño ícono:

repositorios uwamp

Y luego vemos el listado de los mismos y seleccionamos el que queramos descargar e instalar:

listado de repositorios uwamp

Instalar varias versiones de MySQL en el servidor web

Para descargar MySQL tenemos que irnos a la web oficial Download MySQL Community Servery descargarlo, probablemente nos pedirá que iniciemos sesión e indiquemos para que queremos emplear la famosa base de damos MySQL; finalmente hacemos un paso similar al anterior:

C:\UwAmp\bin\database

versiones MySQL en uwamp

Manejo de varias versiones de PHP en Windows

En Windows hacía los cambios así en httpd.conf:

LoadModule php5_module c:/php5/libphp5.so
#LoadModule php7_module c:/php7/libphp7.so

Antes usaba UwAmp para alternar entre versiones de PHP y MySQL, desde la interfaz, seleccionas la versión de PHP desde un menú y Apache reconfigura todo automáticamente.

Ahora uso Laravel Herd y Laragon y puedes buscar las publicaciones en la categoría de Laravel para obtener el detalle de las mismas, con estas tecnologías es la forma moderna de poder hacer cambios en nuestro ecosistema de trabajo

Apache modulo mod_rewrite

El MOD_REWRITE es un módulo provisto por el servidor Apache que permite crear URLs alternativas a las URLs dinámicas generadas por la forma en que están programadas nuestras aplicaciones web; de forma tal que sean más fáciles de recordar, más legibles y también mejor indexadas por los buscadores; y esto es un factor importante a considerar al momento del SEO.

Activar el MOD_REWRITE en Apache

Todo se reduce a 2 sencillos pasos: ejecutar un comando por línea de comandos y modificar las directivas de un archivo de configuración de Apache.

El comando a2enmod sirve para habilitar módulos en Apache; para habilitar el modulo rewrite de Apache ejecutamos:

a2enmod rewrite

Después en la ruta:

/etc/apache2/sites-available/default

Buscamos las lineas que digan:

AllowOverride None

Y las cambiamos todas por:

AllowOverride All

De forma tal que permitimos la reescritura de las URLs; ahora reiniciamos Apache con la siguiente instrucción:

/etc/init.d/apache2 restart

o

service httpd stop service httpd start

Validando el funcionamiento del MOD_REWRITE

Validando el funcionamiento del MOD_REWRITE

Para probar que la activación del módulo rewrite a funcionado; nos creamos un archivo .htaccess en la raíz de nuestro servidor; el archivo .htaccess, esta formado por reglas basadas en expresiones regulares; las cuales Apache procesará. En este ejemplo haremos un redirección utilizando una sencilla regla; copiamos las siguientes líneas en el .htaccess.

RewriteEngine On RewriteRule prueba.html http://www.google.com [R]

Nos creamos un documento HTML de prueba en la raíz de nuestro servidor; no hace falta que tenga ningún contenido, lo llamaremos prueba.html.

Colocamos la siguiente URL <nuestro-host>/prueba.html en nuestro navegador.

En donde <nuestro-host> es el servidor en donde estamos trabajando; si el mismo es nuestra máquina; será localhost.

Si todo va bien Apache nos habrá redirigido a la página principal de Google.

¿Qué es lo que hemos hecho?

Para contestar esta pregunta debemos explicaremos las reglas contenidas en el .htaccess:

  • La primera linea "encendemos" o permitimos la reescritura.
  • La segunda y última línea estamos creando una regla con RewriteRule en donde le indicamos que cuando "encuentre" prueba.html desde la raíz, nos redirige a google.com; por último la bandera [R] Fuerza a redireccionar a una URL externa una URL proveniente de nuestro servidor o interna en nuestro servidor.

¿Cuándo elegir Apache y cuándo no?

Ventajas reales en proyectos pequeños, medianos y locales

  • Muy flexible
  • Fácil de depurar
  • Ideal para desarrollo local
  • Gran ecosistema de módulos
  • Excelente documentación

Limitaciones y cómo mitigarlas

  • Menor rendimiento en tráfico masivo (usa MPM event o combina con NGINX).
  • Reglas .htaccess pueden ralentizar (mejor moverlas al VirtualHost).

Casos reales donde Apache destaca

  • Proyectos PHP
  • Aplicaciones con reglas de reescritura
  • Entornos educativos
  • Servidores simples y proyectos medianos

Conclusión

Apache es uno de los servidores más completos, flexibles y potentes que puedes usar. A lo largo de mis proyectos, me ha permitido hacer desde configuraciones básicas hasta montar sistemas completos con SSL, múltiples logs, VirtualHosts y módulos avanzados.
Si quieres un servidor estable, confiable y muy configurable, Apache sigue siendo una elección excelente.

Preguntas frecuentes sobre Apache

  • ¿Apache es gratuito?
    • Sí, completamente gratuito y de código abierto.
  • ¿Cuánto tráfico puede manejar Apache?
    • Depende del MPM, hardware y configuración, pero es estable para proyectos medianos.
  • ¿Necesito Apache para ejecutar PHP?
    • No, pero es el más cómodo y universal.
  • ¿Apache funciona en Windows?
    • Sí, funciona bien con XAMPP, UwAmp o instalaciones manuales.
  • ¿Puedo usar Apache y NGINX juntos?
    • Sí. NGINX como proxy inverso y Apache detrás es una combinación muy popular.

Acepto recibir anuncios de interes sobre este Blog.

Descubre qué es un servidor Apache, cómo funciona y cómo configurarlo con módulos, VirtualHosts, SSL y .htaccess. Guía completa con ejemplos reales.

| 👤 Andrés Cruz

🇺🇸 In english