jueves, 13 de agosto de 2026

¿Por qué Apache es más fácil para public_html?

 

Para gestionar carpetas public_html de usuarios del sistema, Apache es mucho más fácil que Nginx, incluso dentro de un contenedor Docker.
Aquí te explico detalladamente por qué, usando una analogía simple: Apache está diseñado para ser multiusuario desde sus orígenes, mientras que Nginx nació enfocado en el rendimiento puro para un único administrador. [1]

¿Por qué Apache es más fácil para public_html?

  • Módulo Nativo (mod_userdir): Apache incluye el módulo userdir. Con solo activarlo, el servidor mapea automáticamente la ruta http://ip/~usuario/ hacia /home/usuario/public_html/. No tienes que escribir reglas complejas. [2]
  • Gestión de Permisos: Apache se adapta de forma nativa a la estructura de usuarios de Linux (/etc/passwd).
  • El problema con Nginx: Nginx no tiene un equivalente a mod_userdir. Para lograr lo mismo en Nginx, tendrías que escribir expresiones regulares complejas (Regex) en su archivo de configuración para capturar el nombre del usuario desde la URL y redirigir manualmente la ruta del disco, lo cual es propenso a errores de seguridad y permisos.

Cómo desplegarlo en Docker con Apache (La opción fácil)

Para que funcione con los usuarios de tu máquina host, lo ideal es montar la carpeta /home de tu Linux dentro del contenedor de Apache.

1. Crea el archivo Dockerfile

Crea un archivo llamado Dockerfile en una carpeta vacía para construir tu servidor Apache modificado (ya que la imagen oficial de Apache trae userdir desactivado por defecto):
FROM httpd:2.4

# Activa el módulo userdir y su configuración nativa
RUN sed -i 's/#Include conf/extra/httpd-userdir.conf/Include conf/extra/httpd-userdir.conf/' conf/httpd.conf \
    && sed -i 's/#LoadModule userdir_module/LoadModule userdir_module/' conf/httpd.conf

2. Construye la imagen de Docker

Ejecuta este comando en la terminal donde guardaste el Dockerfile: [3]
docker build -t apache-usuarios .

3. Arranca el contenedor mapeando los usuarios

Para que el Apache de Docker pueda ver las carpetas public_html de tus usuarios reales de Ubuntu, debes montar el directorio /home usando volúmenes (-v):
docker run -d -p 8080:80 --name web-usuarios -v /home:/home apache-usuarios

4. ¡Listo!

Cualquier usuario de tu sistema que tenga una carpeta en /home/usuario/public_html (con los permisos 755 que configuramos en el paso anterior) será visible inmediatamente en la web a través de:
http://localhost:8080/~usuario/
Si prefieres ver cómo sería la alternativa compleja con Nginx para comparar las reglas de código, o si necesitas que este Docker maneje también bases de datos para cada usuario, avísame y te armo la configuración.

No hay comentarios:

Publicar un comentario