© Grupo Docente de Redes
[Link] [Link]
© Grupo Docente de Redes Servicio Web
[Link]
Servidor HTTP libre, open source
[Link]
Ejecutable en varios sistemas operativos
Unix, FreeBSD, Linux, Microsoft Windows ….
Permite múltiples lenguajes de script
PHP, Perl, Tcl, Python
Soporte J2EE Tomcat
Permite contenido dinámico
Virtual hosts
Un servidor varias IPs y/o nombres de dominio
Prácticas de Servicios en Red 2
© Grupo Docente de Redes Servicio Web
[Link]
Compuesto por un núcleo y módulos adicionales
Se pueden crear nuevos módulos con el API de
módulos de Apache
Añadir o eliminar módulos Funcionalidad
Servidor a medida
[Link]
Autenticación
Soporte SSL
Prácticas de Servicios en Red 3
© Grupo Docente de Redes Servicio Web
[Link]
Configuración sencilla
Basada en directivas que se editan en ficheros:
[Link]
Configuración principal
.htaccess
Cualquier carpeta
Determinado por AllowOverride
Categorías de directivas que pueden ser modificadas.
Prevalece frente a [Link]
Prácticas de Servicios en Red [Link] 4
© Grupo Docente de Redes Servicio Web
[Link]
conf/[Link]
Archivo texto con las directivas de configuración
Bloques de directivas
Directivas globales
Directivas en contenedores
Carpetas <Directory>
Hosts virtuales <VirtualHost>
Bajo alguna condición <Location>
Prácticas de Servicios en Red 5
© Grupo Docente de Redes Servicio Web
[Link]
Directivas globales (por defecto)
Dirección de instalación del servidor
ServerRoot "/etc/httpd"
Puertos y direcciones IP de escucha
Listen 80 (Formato: Listen <IP>:<Puerto>)
Carga de módulos
Include [Link].d/*.conf
Archivos con LoadModule <módulo> <fichero_módulo>
Usuario y grupo de la aplicación
User y Group (apache)
Conjunto de caracteres Permitir acentos
AddDefaultCharset on
Prácticas de Servicios en Red 6
© Grupo Docente de Redes Servicio Web
[Link]
Configuración Servidor Principal
Configura respuesta cuando la solicitud no coincide
con ningún servidor virtual
Opciones por defecto para los servidores virtuales
Pueden ser modificada en la definición del servidor virtual
Servidores Virtuales
Varios sitios web en una sola máquina (servidor
Apache).
Basados en la dirección IP IP distinta para cada sitio web
Basados en el nombre Dirección IP con múltiples
nombres
Prácticas de Servicios en Red 7
© Grupo Docente de Redes Servicio Web
[Link]
ServerAdmin <correo>
ServerName <nombre | IP> :<puerto>
Si no se especifica lo toma el DNS
Denegar acceso a los archivos del servidor
<Directory />
AllowOverride none
Require all denied
</Directory>
DocumentRoot "/var/www/html“
Carpeta donde están los documentos
Se pueden usar enlaces simbólicos y alias
Permite el acceso <Directory /var/www/html>
AllowOverride none
Require all granted
</Directory>
Prácticas de Servicios en Red 8
© Grupo Docente de Redes Servicio Web
[Link]
DirectoryIndex [Link]
Cuando no se especifica [Link]
Incluir otros ficheros de configuración
Include <path name>
IncludeOptional conf.d/*.conf
Previene el acceso a archivos de configuración
.htaccess y .htpasswd
<Files “.ht*”>
Require all denied
</Files
ErrorLog "logs/error_log"
LogLevel warn
Prácticas de Servicios en Red 9
© Grupo Docente de Redes Servicio Web
[Link]
1) Instalar y arrancar Apache
systemctl start/restart/stop/status httpd
apachectl graceful
Recarga si interrumpir conexiones pendientes
2) Probar a acceder desde un navegador
Página de prueba del Apache
2) Configurar
Nombre [Link] Declarar en el DNS
Puerto de escucha 80 y 8080 Dos Listen 80 y 8080
Copiar el [Link] del campus
3) Probar
[Link]
[Link]
Prácticas de Servicios en Red 10
© Grupo Docente de Redes Servicio Web
[Link]
<VirtualHost>: Host virtual
Se aplica siempre después de las directivas generales
<IfDefine>: sólo se aplica si al arrancar el servidor existe un
parámetro concreto definido en la línea de comandos de
arranque del apache
<IfModule>: sólo se aplica si el módulo especificado se encuentra
cargado (mediante LoadModule) en el momento de arrancar el
servidor
Prácticas de Servicios en Red 11
© Grupo Docente de Redes Servicio Web
[Link]
Varios sitios web en una sola máquina (servidor Apache).
Basados en la dirección IP IP distinta para cada sitio web
Basados en el nombre Dirección IP con múltiples nombres
Asignar nombres a cada servidor virtual
Configurar los servidores virtuales en el [Link]
Buena praxis un archivo de configuración aparte con un include (carpeta
conf.d)
Se cargan por orden alfabético
Heredan configuración del principal
Prácticas de Servicios en Red [Link] 12
© Grupo Docente de Redes Servicio Web
[Link]
Archivo de configuración
Contenedor
<VirtualHost IP:Puerto>
……………….
</VirtualHost>
IP, Puerto (IP y Puerto permiten *)
Personaliza los valores de ServerAdmin, ServerName, DocumentRoot, ErrorLog y
TransferLog o CustomLog
Se puede colocar casi cualquier otra directiva
Prácticas de Servicios en Red [Link] 13
© Grupo Docente de Redes Servicio Web
[Link]
Basados en nombre
<VirtualHost *:80>
ServerAdmin webmaster@[Link]
ServerName [Link].
ServerAlias [Link]
DocumentRoot “/var/www/html/r108”
<Directory /var/www/html/r108>
Options -Indexes /* No lista la carpeta si no hay index */
AllowOverride all /* Permite modificar características mediante .htaccess */
Requiere all granted
</Directory>
ErrorLog logs/[Link]
CustomLog logs/[Link] combined
</VirtualHost>
Prácticas de Servicios en Red [Link] 14
© Grupo Docente de Redes Servicio Web
[Link]
<VirtualHost *:80>
ServerAdmin paco@[Link]
ServerName [Link]
DocumentRoot /home/paco/public_html/www
ErrorLog logs/[Link]
CustomLog logs/[Link] combined
<Directory /home/paco/public_html/www>
Options -Indexes /* No lista la carpeta si no hay index */
AllowOverride all /* Permite modificar características mediante .htaccess */
Require all granted
</Directory>
</VirtualHost>
Hay que crear las carpetas donde se alojan los contenidos
Añadir un [Link]
Prácticas de Servicios en Red [Link] 15
© Grupo Docente de Redes Servicio Web
[Link]
Servidor basado en dirección IP
Varias direcciones IP
Listen 80
<VirtualHost [Link]>
……………
………..
</VirtualHost>
<VirtualHost [Link]>
……………
………..
………..
</VirtualHost>
Prácticas de Servicios en Red [Link] 16
© Grupo Docente de Redes Servicio Web
[Link]
Servidor basado en Puertos
<VirtualHost [Link]:80>
………..
</VirtualHost>
<VirtualHost [Link]:8080>
………..
</VirtualHost>
Prácticas de Servicios en Red [Link] 17
© Grupo Docente de Redes Servicio Web
[Link]
Visualización
Primero condición de la directiva VirtualHost y luego ServerName
Si hay coincidencia en la cabecera VirtualHost pero no coincide ningún ServerName
muestra el primer Virtualhost que se haya definido.
Prácticas de Servicios en Red [Link] 18
© Grupo Docente de Redes Servicio Web
[Link]
[Link]
# Load config files in the "/etc/httpd/conf.d" IncludeOptional conf.d/*.conf
Crear un archivo por cada sitio virtual
1) Crear un servidor con las siguientes características
Archivo se llama [Link]
Escucha en cualquier IP y Puerto 80 VirtualHost
Nombre del sitio S1.<dominio> NameServer (Declarar DNS)
Donde estan las páginas: /var/www/html/S1 DocumentRoot
No se permite listar el contenido de la carpeta Options -Indexes
Archivos de log en logs/s1 ErrorLog y CustomLog
Descargar Esqueleto del Campus
Adaptar el [Link] descargado del campus
Tener en cuenta que las carpetas que no existan hay que crearlas
2) Probar a acceder a [Link] ,a [Link], [Link]
3) Lo mismo que en el 2 pero en el puerto 8080
Prácticas de Servicios en Red [Link] 19
© Grupo Docente de Redes Servicio Web
[Link]
El acceso a cualquier sitio de nuestro dominio en el puerto 80 nos la misma
página.
Coincide con una entrada VirtualHost
Muestra VirtualHost por defecto El primero en cargar
Si no coincide con ningún virtual host iría a [Link]
Cuando accedemos con el Puerto 8080
1) Crear otro servidor virtual
Va responder a [Link] en el Puerto 80
Mismo esqueleto que el S1
Debe mostrar este sitio cuando sea [Link]
Debe mostrar este sitio cuando se accede por un nombre que no tenga servidor
virtual en el Puerto 80 Es decir por defecto
El acceso [Link] nos debe mostrar este sitio
El acceso a [Link] nos debe mostrar este sitio
2) El acceso a [Link] debe mostrar el sitio creado en el apartado 1
3) El acceso a cualquiera de ellos por el 8080 debe mostrar el declarado en
[Link]
Prácticas de Servicios en Red [Link] 20
© Grupo Docente de Redes
[Link] [Link]
© Grupo Docente de Redes Servicio Web
[Link]
Permisos adecuados para
Usuario dueño del sitio
Usuario de apache Fedora (usuario apache y grupo apache)
Acceso a las carpetas públicas del sitio web
Poder leer y mostrar sus contenidos
Hacer al usuario del sitio miembro del grupo apache
usermod –a –G apache <usuario>
chgrp –R apache <carpeta>
chmod -R 2775 <carpeta>
Prácticas de Servicios en Red 2
© Grupo Docente de Redes Servicio Web
[Link]
• Habilitar el módulo SSL
• yum install mod_ssl openssl
Configura la carga del módulo [Link].d/[Link]
LoadModule ssl_module modules/mod_ssl.so
Virtual host 443 por defecto conf.d/[Link]
3
pag 203 manual linux
Prácticas de Servicios en Red
© Grupo Docente de Redes Servicio Web
[Link]
• [Link] (por defecto)
• Crea un servidor virtual en el puerto 443
Listen 443 https
<VirtualHost _default_:443>
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/[Link]
SSLCertificateKeyFile /etc/pki/tls/private/[Link]
#SSLCACertificateFile /etc/pki/tls/certs/[Link]
……………
</VirtualHost>
• No define ServerName, ni DocumentRoot
• Lo hereda del principal
Prácticas de Servicios en Red 4
© Grupo Docente de Redes Servicio Web
[Link]
• Crear certificado autofirmado (o contratarlo)
openssl req -sha256 -x509 -nodes -newkey rsa:4096 -days 360 -out
[Link] -keyout [Link]
Common Name [Link]
• Mover con permisos 600
[Link] /etc/pki/tls/certs [Link] /etc/pki/tls/private
Prácticas de Servicios en Red 5
© Grupo Docente de Redes Servicio Web
[Link]
<VirtualHost *:443>
ServerAdmin webmaster@[Link]
ServerName [Link].
ServerAlias [Link]
DocumentRoot /var/www/html/r108
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/[Link]
SSLCertificateKeyFile /etc/pki/tls/private/[Link]
<Directory /var/www/html/r108>
…………………..
</Directory>
</VirtualHost>
Prácticas de Servicios en Red 6
© Grupo Docente de Redes Servicio Web
[Link]
• Si queremos que siempre conecte siempre cifrado.
Redirección del 80 al 443
Mantenemos ServerName y ServerAlias
<VirtualHost *:80>
ServerName [Link].
Redirect permanent / [Link]
</VirtualHost>
Prácticas de Servicios en Red 7
© Grupo Docente de Redes Servicio Web
[Link]
1) Instalar SSL
2) Probar [Link]
3) Para los servidores virtuales creados en la Tarea III
Todas las peticiones que se realicen al puerto 80 deben
convertirse en conexiones SSL por el puerto 443
4) Probar [Link]
Prácticas de Servicios en Red [Link] 8
© Grupo Docente de Redes Servicio Web
[Link]
Alias, AliasMatch
Otra localización de los documentos en vez de
DocumentRoot.
Alias "/image" "/ftp/pub/image“
[Link] ==> /ftp/pub/image/[Link].
AliasMatch Expresiones regulares
Alias "/image" "/ftp/pub/image"
<Directory "/ftp/pub/image">
Require all granted
</Directory>
Opciones
Indexes Lista carpetas si no hay [Link]
DirectoryIndex Pagina que se muestra si no se indica
ninguna
FollowSymLink Referencias a enlaces simbólicos
Prácticas de Servicios en Red 9
Redirect
Le dice al navegador que la URL que ha solicitado esta en otra URL
Redirect /buscador [Link]
Redirect /elsitio [Link]
A diferencia del Alias hace que el navegador haga otra petición
(ver URL)
Puede indicar el motivo.
Por defecto temporal (302)
Puede ser permanente (301)
….
Redirect permanente /elsitio [Link] ó
Redirect 301 /elsitio [Link]
[Link]
© Grupo Docente de Redes 10
current/mod/mod_alias.html
[Link]
© Grupo Docente de Redes Servicio Web
[Link]
Autenticación. Verificar que se es quien se dice ser.
Autorización. Permiso para estar o tener ciertas información
Directivas Cargar los módulos necesarios.
AuthType Tipo de autenticación de usuarios para una carpeta
Basic Contraseña se transmite en texto claro (usar solo con https)
Digest No transmite en texto claro.
Form Formularios
Entre basic y digest lo más seguro es basic con SSL (https)
AuthBasicProvider AuthDigestProvider Proveedor autenticación
Donde esta la información de usuarios
dbm, file : texto plano dbd: sql ldap
Require Autorización
Prácticas de Servicios en Red [Link] 11
© Grupo Docente de Redes Servicio Web
[Link]
Dos formas de configurar
En [Link] (p.e <Directory>)
.htaccess en cada carpeta Permitirlo en [Link]
AllowOverride Directivas modificables en .htaccess AuthConfig en este caso
Usuarios
Crear archivo de contraseñas Lugar no accesible desde la web
htpasswd –c <ruta archivo> <usuario>
Servidor pide la contraseña y donde puede acceder
[Link] o .htaccess
<Directory "/usr/local/apache/htdocs/secret">
AuthType Basic
AuthName "Restricted Files“
# El cliente no pide de nuevo la contraseña si se accede a otra zona con el mismo AuthName
AuthBasicProvider file
# dbm para archivos de acceso rápido. dbmanage y htdbm. Muchos usuarios
AuthUserFile "/etc/httpd/passwords"
Require user paco
</Directory>
Prácticas de Servicios en Red [Link] 12
© Grupo Docente de Redes Servicio Web
[Link]
Más de un usuario
Archivo de grupo migrupo: paco Isabel Roberto (existen en el archivo de
usuarios)
Cambiar Require user paco por Require group migrupo
AuthGroupFile "/usr/local/apache/passwd/groups“
Require valid-user Cualquier usuario del archivo de contraseñas especificado
Distinto archivo por recurso o grupo de recursos Similar al grupo
Prácticas de Servicios en Red [Link] 13
© Grupo Docente de Redes Servicio Web
[Link]
Una forma de realizar cambios en la configuración en
contexto directorio
Un archivo con directivas en un directorio.
Estas directivas aplican a ese directorio y todos sus subdirectorios.
AccessFileName “<nombre>“ .htaccess por defecto
Misma sintaxis archivo principal
Lo que puede utilizar en estos ficheros lo determina la
directiva AllowOverride
ALL , None, AuthConfig, Indexes, Limit, Options, ….
AllowOverride AuthConfig Indexes
Se pueden modificar directivas del grupo AuthConfig o Indexes
Prácticas de Servicios en Red [Link] 14
© Grupo Docente de Redes Servicio Web
[Link]
No recomendable usar si se tiene acceso al [Link]
Mejor en la sección directory
Creencia errónea
Autenticación de usuario
Las directivas de mod_rewrite (URL y pathname)
Funcionan mejor en la configuración principal
Autenticación de usuario
Directivas mod_rewrite
Peor rendimiento y seguridad
Usar cuando el proveedor de contenidos te permite
hacer modificaciones de configuración en contexto
directorio, pero no tienes acceso como root al servidor.
Cliente de un VirtualHost
Prácticas de Servicios en Red 15
© Grupo Docente de Redes Servicio Web
[Link]
Ejemplo autenticación
AuthType Basic
AuthName "Password Required"
AuthUserFile "/www/passwords/[Link]"
AuthGroupFile "/www/passwords/[Link]"
Require group admins
AllowOverride AuthConfig habilitado
Prácticas de Servicios en Red 16
© Grupo Docente de Redes Servicio Web
[Link]
Queremos disponer en el sitio S1 de una
carpeta de descarga, donde el
administrador pueda poner
documentación que puedan ser
descargada por los usuarios registrados.
Prácticas de Servicios en Red 17