HTTPD - Apache 2

Los usuarios introducen una URL para apuntar a un webserver por medio de su FQDN y el path del recurso. El protocolo más usado para transferencia de páginas web es el HTTP. HTTPS y FTP son también soportados.

La configuración LAMP (Linux,Apache,MySQL y Perl/Python/PHP) forma una potente y robusta plataforma para el desarrollo y despliegue de aplicaciones basadas en web.

Para instalar apache2:

sudo apt-get install apache2

Configuración

Esta colocado en archivos de configuración de texto plano:
  • apache2.conf: archivo principal de configuración. Contiene ajustes globales.
  • conf.d: contiene archivos de configuración.
  • envvars: archivo de variables de entorno
  • httpd.conf: históricamente fue el archivo principal de apache. Da nombre al demonio httpd.
  • mods-available: contiene archivos de configuración para carga y configuración de módulos. No todos lo módulos tendrán una configuración especifica.
  • mods-enabled: mantiene symlinks para los archivos en /etc/apache2/mods-available. Cuando un archivo de configuración de módulo es symlinked será capacitado la siguiente vez que apache2 sea reiniciado.
  • ports.conf: determina en que puertos escucha apache2.
  • sites-available: contiene archivos de configuración para Apache Virtual Hosts. Virtual Hosts permite que Apache2 sea configurado para multiples sites que tienen configuraciones separadas.
  • sites-enabled: contiene symlinks para el /etc/apache2/sites-available.
El servidor puede leer archivos con tipo MIME; el filename utiliza la directiva TypesConfig y está en /etc/mime.types por defecto.

Ajustes básicos

Esta sección explica los parámetros de configuración esenciales para Apache2.

Apache2 trae una configuración de virtual-host-amistoso por defecto. Es decir, está configurado con un solo virtual-host por defecto, que se puede dejar tal cual si tiene un solo sitio, o se utiliza como plantilla para servidores virtuales adicionales. Si no está solo, el servidor virtual predeterminado servirá su sitio predeterminado, o los usuarios del sitio verán si la URL no concuerda con la directiva ServerName de cualquiera de sus sitios personalizados. Para modificar el host virtual por defecto, editar el archivo /etc/apache2/sites-available/default

El conjunto de directivas para un servidor virtual sólo se aplican a un servidor virtual particular. Si se establece una directiva en todo el servidor y no se define dentro de la configuración de la máquina virtual, la configuración por defecto se utilizará. Esto es útil para definir una dirección de correo del webmaster y no definir cada dirección de correo para cada host virtual.

Si quieres configurar un nuevo virtualhost o sitio, copia ese archivo dentro del mismo directorio y elige un nombre. Por ejemplo:

sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/mynewsite

Edita el nuevo archivo para configurar el nuevo sitio usando algunas de las directivas descritas a continuación:
  • ServerAdmin especifica el email del administrador. Por defecto es webmaster@localhost. Esto debe ser cambiado. Si tu website tiene un problema apache muestra un mensaje de error con el email. Esta directiva se encuentra en /etc/apache2/sites-available.
  • Listen especifica el puerto y opcionalmente la IP. Si la IP no está especificada, apache escuchará en todas las IP asignadas a la maquina donde se ejecuta. El valor por defecto es 80. Esta directiva se encuentra en /etc/apache2/ports.conf
  • ServerName es opcional y especifica que FQDN tu sitio debe responder. El valor por defecto no está especificado, por lo que responderá todas las peticiones que no se ajusten al ServerName de otro virtual host. Si has adquirido el dominio example.com y deseas alojarlo en tu server, el valor de la directiva ServerName en el archivo de configuración de tu virtual host debe ser example.com. Añade esta directiva al nuevo archivo de virtual host que acabas de crear en /etc/apache2/sites-available/mynewsite.
Puedes querer que responda también a www.example.com, usa la directiva ServerAlias para esto. Puedes usar comodines.
Por ejemplo, lo siguiente causará que tu sitio responda cualquier petición acabada en .example.com.

ServerAlias *.example.com
  • DocumentRoot especifica donde apache debe buscar los archivos que constituyen el sitio. El valor por defecto es /var/www. No hay ningún sitio configurado allí, pero si descomenta la directiva RedirectMatch en /etc/apache2/apache2.conf, las peticiones se redirigiran a /var/www/apache2-default. Cambia este valor en la maquina virtual de tu sitio y recuerda crear ese directorio si fuera necesario.
El directorio /etc/apache2/sites-available no es analizado por apache. Enlaces simbólicos en /etc/apache2/sites-enabled apuntan a sitios "available".

Capacitar el nuevo virtualhost usando la utilidad a2ensite y reiniciar Apache:

sudo a2ensite mynewsite
sudo /etc/init.d/apache2 restart

Dale un nombre más descriptivo al virtual host. Un método es nombrar el archivo después de la directiva ServerName del VirtualHost.

Similarmente, usa a2ensite para descapacitar sitios. Esto es útil cuando encontramos problemas de configuración con multiples VirtualHost:

sudo a2dissite mynewsite
sudo /etc/init.d/apache2 restart

Ajustes por defecto

Si añades un virtual host, los ajustes que definas toman precedencia. Para una directiva no definida los valores por defecto son usados.
  • DirectoryIndex es la página por defecto que entrega el servidor cuando un usuario solicita un índice de un directorio especificado con una barra inclinada (/) al final del nombre del directorio.
El servidor intentará encontrar uno de los archivos enumerados en la directiva DirectoryIndex y le entregará el primero que encuentre. Si no encuentra ninguno y OptionsIndexes está configurado para ese directorio, el servidor devolverá una lista, en HTML, de los subdirectorios y archivos en el directorio. El valor por defecto, se encuentra en /etc/apache2/apache2.conf es "index.html index.php index.cgi index.pl index.xhtml".

  • ErrorDocument permite especificar un archivo para apache para eventos error. Por ejemplo, si un usuario pide un recurso que no existe, un 404 error ocurrirá, y por defecto el archivo /usr/share/apache2/error/HTTP_NOT_FOUND.html.var será mostrado. Ese archivo no está en el DocumentRoot del servidor, pero hay un Alias en /etc/apache2/apache2.conf que redirige peticiones a el directorio /error, /usr/share/apache2/error/

Para ver una lista de las directivas por defecto de ErrorDocument, usa:

grep ErrorDocument /etc/apache2/apache2.conf


  • Por defecto, el servidor escribe el log de transferencia en el archivo /var/log/apache2/access.log. Tu puedes cambiar esto en funcion de cada sitio en los archivos de configuración de virtualhost con la directiva CustomLog, u omitirlo para aceptar el valor predeterminado, especificado en /etc/apache2/apache2.conf. También puedes especificar el archivo en el que se registrarán los errores, a través de la directiva ErrorLog, cuyo valor predeterminado esta en /var/log/apache2/error.log. Estos se mantienen separados de los registros de transferencias para ayudar en la solución de problemas con tu servidor. También puedes especificar el LogLevel (el valor predeterminado es "advertir") y el LogFormat cuyo valor por defecto está en /etc/apache2/apache2.conf.
  • Algunas opciones son especificadas por directorio en lugar de por servidor. Options es una de estas directivas. Un parrafo Directory es encerrado en etiquetas tipo XML:
<Directory /var/www/mynewsite>
...
</Directory>

La directiva Options dentro del parrafo Directory acepta uno o más de los siguientes valores (entre otros), separados por espacios:
  • ExecCGI permite la ejecución de scripts CGI. No se ejecutan si esta opción no está elegida.
Ojo, la mayoría de archivos no deberían ser ejecutados como scripts CGI. Esto sería muy peligroso. Los scripts CGI deberían mantenerse en un directorio separado fuera de tu DocumentRoot, y solo este directorio debe tener la opción ExecCGI. Esto es lo predeterminado, y la ubicación predeterminada para los CGI es /usr/lib/cgi-bin.
  • Includes - Permite inclusiones del lado del servidor. Esta no es una opción común.
  • IncludesNOEXEC - Permite inclusiones del lado del servidor, pero descapacita los comandos #exec y #include en scripts CGI
  • Indexes - Muestra una lista formateada de los contenidos del directorio, si DirectoryIndex no existe en el directorio pedido.
Ojo, por razones de seguridad, esto no debe establecerse, y menos aún en tu directorio DocumentRoot. Permitelo solo si estas seguro de que quieres que los usuarios vean el contenido completo del directorio.
  • Multiview - Esta opción esta discapacitada por defecto.
  • SymLinksOwnerMatch - Solo sigue enlaces simbolicos si el propietario es el mismo.

Ajustes httpd

Esta sección explica algunos ajustes básicos de configuración del demonio httpd.

  • LockFile - Establece el path del lockfile. Debe ser guardado en el disco local. Debe dejarse a su valor predeterminado a menos que el directorio de logs se encuentre en un NFS share. Si este es el caso, el valor por defecto debería ser cambiado a una ubicación en el disco local y un directorio que sea legible por root.
  • PidFile - Ajusta el archivo en el cual el servidor registrará sus procesos ID (pid). Este archivo debe solo ser leible por root. En la mayoría de casos debería dejarse a su valor predeterminado.
  • User - Ajusta el userid usado por el servidor para responder peticiones. El valor predeterminado para User es www-data.
Ojo, no establezcas la directiva User a root. Crearás un agujero de seguridad en tu servidor.

La directiva Group es similar a User. Establece el grupo bajo el cual el servidor responderá peticiones. El grupo por defecto es también www-data.

Modulos Apache

Apache es un servidor modular. Esto significa que solo la funcionalidad más básica es incluida en el núcleo. Si el servidor está compilado para usar dinámicamente modulos cargados, entonces modulos pueden ser compilados separadamente, y añadidos en cualquier momento usando la directiva LoadModule.
Directivas de configuración pueden ser condicionalmente incluidas sobre la presencia de un módulo particular encerrandolas en un bloque <IfModule>.

Tu puedes instalar modulos adicionales y usarlos con tu webserver. Por ejemplo, esto instala el módulo MySQL Authentication:

sudo apt-get install libapache2-mod-auth-mysql

Ver el directorio /etc/apache2/mods-available para modulos adicionales.

Usa la utilidad a2enmod para posibilitar un modulo:

sudo a2enmod auth_mysql
sudo /etc/init.d/apache2 restart


Similarmente, a2dismod para discapacitarlo.

Configuración HTTPS

El mod_ssl añade una característica importante al servidor apache - la habilidad de encriptar comunicaciones. Cuando tu navegador usa SSL el prefijo https:// es usado en el comienzo de la URL.
El mod_ssl está disponible en el paquete apache2-common.

sudo a2enmod ssl

Hay un archivo de configuración HTTPS predeterminado en /etc/apache2/sites-available/default-ssl. La configuración HTTPS predeterminada usará un certificado y clave generado por el paquete ssl-cert. Ellos son buenos para testear, pero deben ser sustituidas por un certificado especifico para el sitio o servidor. Ver la sección Certificados.

Para configurar Apache para HTTPS:

sudo a2ensite default-ssl

Los directorios /etc/ssl/certs y /etc/ssl/private son localizaciones por defecto. Si tu instalas el certificado y la clave en otro directorio asegurate de cambiar SSLCertificateFile y SSLCertificateKeyFile

Ahora reinicia el servicio:

apropiadamente.
sudo /etc/init.d/apache2 restart

Dependiendo de como has obtenido el certificado puede que necesites introducir una passphrase cuando Apache arranque.

Tu puedes acceder a las páginas seguras con https://tu_hostname/url/ en el navegador.