APACHE: Configuración

Configurar Apache.conf

  • Abrimos el archivo:
nano /etc/apache2/apache2.conf
  • Timeout: Tiempo en segundos que el servidor espera una respuesta antes de emitir un fallo, por ejemplo leer datos del cliente, escribir datos, entre otros. Podemos ver el log para ver si es necesario aumentarlo
Timeout 300
X
Timeout 300
  • KeepAlive:
    • En «On»: Permite que el navegador y el servidor reutilicen la misma conexión para transferir múltiples archivos
    • En «Off»: cada solicitud de archivo crea una conexión que se cierra cuando se entrega
    • Ventajas:
      • Mejora la velocidad del sitio web, ofreciendo una mejor experiencia de usuario
      • Reduce CPU del servidor: cada pagina tiene cientos de archivos (js,css,img) si esta en ON cada uno debe abrir una conexión por tanto consumo de CPU
    • Desventajas:
      • Aumenta el uso de memoria en el servidor: las conexiones se mantienen abiertas en la RAM, mientras esperan están ocupando RAM
    • Cuando usar:
      • Por recursos:
        • Poca RAM: apagar
        • Poco CPU: activar
      • Por tipo de sitios:
        • Si las paginas tienen muchos archivos (css,js,img) activar, mejora la experiencia de usuario
      • Patrones de trafico:
        • Si el trafico de su servidor es constante durante todo el día, activelo
        • Si el trafico es en un momento dato por mucha gente desactívelo
----------------------------------------------------------------------------
#activar conexiones persistente
KeepAlive On
X
KeepAlive On
----------------------------------------------------------------------------
#Cantidad máxima de solicitudes que atenderá una conexión persistente (cuantos archivos)
MaxKeepAliveRequests 100
X
MaxKeepAliveRequests 75
----------------------------------------------------------------------------
#Tiempo en segundos que una conexión debe esperar para nuevas solicitudes antes de cerrarla
KeepAliveTimeout 5
X
KeepAliveTimeout 5
----------------------------------------------------------------------------
  • LogLevel: nivel de detalle del log: emerg, alert, crit, error, warn, notice, info o debug

Desactivar listado de archivos

  • Abrimos:
nano /etc/apache2/apache2.conf
  • Modificamos
<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

----------------------------- X -----------------------------------------
<Directory /var/www/>
        Options -Indexes
        AllowOverride None
        Require all granted
</Directory>

Configurar charsert.conf

  • Para establecer la codificación UTF-8 por defecto. Abrimos el archivo:
nano /etc/apache2/conf-available/charset.conf
  • Descomentamos
#AddDefaultCharset UTF-8
X
AddDefaultCharset UTF-8

Configurar localized-error-pages.conf

  • Abrimos el archivo:
nano /etc/apache2/conf-available/localized-error-pages.conf 
  • Agregamos
ErrorDocument 403 https://403.siua.ac.cr
ErrorDocument 404 https://404.siua.ac.cr
ErrorDocument 500 https://500.siua.ac.cr

Configurar security.conf

  • Para mejorar la seguridad de apache, abrimos el archivo
nano /etc/apache2/conf-available/security.conf
  • Para ocultar la información del versión del servidor, IP, puerto, sistema operativo. Modificamos a producción «Prod»
ServerTokens OS
X
ServerTokens Prod
  • Para ocultar la firma (email del administrador)
ServerSignature On
X
ServerSignature Off

Permisos de carpeta y usuario «ugit»

  • Lo primero que vamos hacer es añadir al usuario «ugit» al grupo «www-data», para que podamos modificar los datos con el usuario ugit
usermod -a -G www-data ugit
  • Ahora establecemos que todo los que este en /var/www/html pertenezca al grupo www-data
chgrp -R www-data /var/www/html
  • Ahora le damos permisos para que los usuarios del grupo «www-data» puedan escribir
chmod -R g+w /var/www/html
  • Ahora le damos permisos a los directorios y archivos de (lectura, escritura y ejecución para usuario y grupo 7 lectura y ejecución para el resto)
find /var/www -type d -exec chmod 2775 {} \;
find /var/www -type f -exec chmod ug+rw {} \;
  • Ahora asignamos el «sticky bit» para el grupo (para que los archivos y directorios que se creen arrastren la propiedad del grupo www-data)
chmod g+s /var/www/html/
  • Asigna los permisos por defecto (para que los directorios que se creen arrastren los mismos permisos)
setfacl -d -m g::rwx /var/www/html/
  • Comprobamos
getfacl /var/www/html/
  • RESULTADO
getfacl: Eliminando '/' inicial en nombres de ruta absolutos
# file: var/www/html/
# owner: root
# group: www-data
# flags: -s-
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x

Deshabilitar 000-default.conf

  • Deshabilitamos
a2dissite 000-default.conf 
  • Reiniciamos el servidor
systemctl reload apache2

 Instalación de módulos

Modulo SSL

  • Para habilitar el soporte de SSL
a2enmod ssl

Módulo Headers

  • Para firmar las paginas con la directiva Header add Author
a2enmod headers
  • En el hostvirtual se agrega
Header add Author "Unidad de Gestion e Innovacion Tecnologica"
  • Para probarlo:
wget -O - -o /dev/null --save-headers web1.siua.ac.cr
  • RESULTADO:
undefined

Módulo Expires

  • Para mejorar la experiencia del usuario y chachear las paginas estáticas y no que se descarguen cada vez que se ingresa
a2enmod expires
  • Creamos un archivo de configuración para el módulo
nano /etc/apache2/mods-available/expires.conf
  • Le agregamos lo siguiente
<IfModule mod_expires.c>
          ExpiresActive on
          ExpiresByType image/jpg "access plus 60 days"
          ExpiresByType image/png "access plus 60 days"
          ExpiresByType image/gif "access plus 60 days"
          ExpiresByType image/jpeg "access plus 60 days"
          ExpiresByType text/css "access plus 1 days"
          ExpiresByType image/x-icon "access plus 1 month"
          ExpiresByType application/pdf "access plus 1 month"
          ExpiresByType audio/x-wav "access plus 1 month"
          ExpiresByType audio/mpeg "access plus 1 month"
          ExpiresByType video/mpeg "access plus 1 month"
          ExpiresByType video/mp4 "access plus 1 month"
          ExpiresByType video/quicktime "access plus 1 month"
          ExpiresByType video/x-ms-wmv "access plus 1 month"
          ExpiresByType application/x-shockwave-flash "access 1 month"
          ExpiresByType text/javascript "access plus 1 days"
          ExpiresByType application/x-javascript "access plus 1 dyas
          ExpiresByType application/javascript "access plus 1 days"
</IfModule>
  • Aquí vídeos, imágenes las almacenamos 1 mes y CCS/JS 1 día
  • La sintaxis es:
ExpiresByType mime.type "<base> [plus] {<num> <type>}*"
  • Donde:
    • Base: access/now/modification
    • plus: opcional
    • Num: número entero
    • type: years/months/weeks/days/hours/minutes/seconds
  • Una vez creado le creamos un enlace simbólico dentro de mods-enabled para habilitarlo
ln -s /etc/apache2/mods-available/expires.conf /etc/apache2/mods-enabled/
  • Si nos da error de que no encuentra el archivo mime types 
zcat /usr/share/doc/apache2.2-common/examples/apache2/mime.types.gz > /etc/apache2/mime.types
  • Si deseamos configurarlo a nivel de Virtual Host añadimos la configuración dentro de la directiva «Directory»
  • Si deseamos que expiren en un segundo
ExpiresActive On
ExpiresDefault M1000

Módulo deflate

  • Permite enviar información de forma comprimida
a2enmod deflate 
  • Este módulo ya viene habilitado y con un archivo de configuración, abrimos:
nano /etc/apache2/mods-available/deflate.conf
  • Agregamos
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
  • Donde le decimos que comprima todo excepto imágenes, archivos ya comprimidos y pdf’s

Módulo info

  • Para ver la información del apache y solo en una máquina
a2enmod info
  • Abrimos
nano /etc/apache2/mods-available/info.conf
  • Modificamos
#Require ip 192.0.2.0/24
X
Require ip 10.20.200.100/32
  • Para revisar la información
#Información del servidor
http://web1.siua.ac.cr/server-info?server
#Información de un módulo específico
http://web1.siua.ac.cr/server-info?mod_info.c
#Información de los módulo compilados
http://web1.siua.ac.cr/server-info?list

Módulo status

  • Instalamos
a2enmod status
  • Abrimos el archivo
nano /etc/apache2/mods-available/status.conf
  • Modificamos
#Require ip 192.0.2.0/24
X
Require ip 10.20.200.100/32
  • Para consultar
http://web1.siua.ac.cr/server-status

Módulo rewrite

a2enmod rewrite
  • Recargamos la configuración
systemctl restart apache2

Configurar fecha

  • Para ver la hora
date
date -u #universal
  • Para configurar la hora
dpkg-reconfigure tzdata
  • Seleccionamos america
Am
undefined
  • Seleccionamos Costa Rica
undefined

Creación de Host Virtual

  • Creamos un archivo (Debe terminar con .conf)
nano /etc/apache2/sites-available/web1.siua.ac.cr.conf
  • Agregamos
<VirtualHost *:80>
        #Nombre del dominio
        ServerName web1.siua.ac.cr
        #Otros nombres con los que se puede encontrar
        ServerAlias www.web1.siua.ac.cr
        #Correo del administrador
        ServerAdmin interuniversitariadealajuela@gmail.com
        #Firma
        Header add Author "Unidad de Gestion e Innovacion Tecnologica"
        #Direccion del sitio
        DocumentRoot /var/www/html/Sitios/index_servidores
        #Ubicacion y personalizacion de los log's
        ErrorLog ${APACHE_LOG_DIR}/web1.siua.ac.cr.error.log
        CustomLog ${APACHE_LOG_DIR}/web1.siua.ac.cr.access.log combined
</VirtualHost>
  • Habilitamos el sitio
a2ensite web1.siua.ac.cr.conf
  • Recargamos el apache
systemctl reload apache2