User Tools

Site Tools


apuntes:servidores_web

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
apuntes:servidores_web [2017/11/02 10:35]
Santiago Faci [Monitorización]
apuntes:servidores_web [2019/01/04 13:02] (current)
Line 5: Line 5:
 Existen un par de servidores web ([[http://httpd.apache.org|Apache]] y [[https://www.iis.net|Microsoft IIS]]) de uso general y muy extendido que se reparten casi la totalidad del mercado. Por otra parte está [[https://nginx.org/en/|nginx]], relativamente reciente, y que ha cogido bastante popularidad en poco tiempo. También aparece alguna solución de Google debido a la popularidad de sus servicios. A partir de ahí, el resto de soluciones, quizás por ser más específicas para productos o tecnologías más concretas y menos extendidas, apenas significan nada en el reparto total. Quizás, junto con el resto de servidores, tambíén puede destacar [[https://www.lighttpd.net|lighttpd]], puesto que actualmente se está hablando bastante de él por su bajo consumo de memoria. Existen un par de servidores web ([[http://httpd.apache.org|Apache]] y [[https://www.iis.net|Microsoft IIS]]) de uso general y muy extendido que se reparten casi la totalidad del mercado. Por otra parte está [[https://nginx.org/en/|nginx]], relativamente reciente, y que ha cogido bastante popularidad en poco tiempo. También aparece alguna solución de Google debido a la popularidad de sus servicios. A partir de ahí, el resto de soluciones, quizás por ser más específicas para productos o tecnologías más concretas y menos extendidas, apenas significan nada en el reparto total. Quizás, junto con el resto de servidores, tambíén puede destacar [[https://www.lighttpd.net|lighttpd]], puesto que actualmente se está hablando bastante de él por su bajo consumo de memoria.
  
-En este capítulo nos centraremos exclusivamente en el servidor web //Apache// (no confundir con el [[http://www.apache.org|Proyecto Apache]] por ser el más utilizado actualmente (e históricamente) con bastnte diferencia con respecto a los demás. Más adelante, centraremos algunas de las prácticas en la instalación y configuración de otros servidores web que hemos comentado anteriormente.+En este capítulo nos centraremos exclusivamente en el servidor web //Apache// (no confundir con el [[http://www.apache.org|Proyecto Apache]] por ser el más utilizado actualmente (e históricamente) con bastante diferencia con respecto a los demás. Más adelante, centraremos algunas de las prácticas en la instalación y configuración de otros servidores web que hemos comentado anteriormente.
  
 [[http://www.netcraft.com|Netcraft]] es una compañia de servicios en Internet que lleva más de 20 años realizando un ranking del uso de los diferentes servidores web en Internet((https://news.netcraft.com/archives/2017/02/27/february-2017-web-server-survey.html)) [[http://www.netcraft.com|Netcraft]] es una compañia de servicios en Internet que lleva más de 20 años realizando un ranking del uso de los diferentes servidores web en Internet((https://news.netcraft.com/archives/2017/02/27/february-2017-web-server-survey.html))
Line 313: Line 313:
     ServerName misitio.com     ServerName misitio.com
     ServerAlias www.misitio.com     ServerAlias www.misitio.com
-    ErrorLog "misitio.com-error_log+    ErrorLog "misitio.com-error.log
-    CustomLog "misitio.com-access_log" combined+    CustomLog "misitio.com-access.log" combined
 </VirtualHost> </VirtualHost>
 </file> </file>
Line 623: Line 623:
     ServerName misitio.com     ServerName misitio.com
     ServerAlias www.misitio.com     ServerAlias www.misitio.com
-    ErrorLog "misitio.com-error_log+    ErrorLog "misitio.com-error.log
-    CustomLog "misitio.com-access_log" combined+    CustomLog "misitio.com-access.log" combined
 </VirtualHost> </VirtualHost>
 </code> </code>
Line 636: Line 636:
     ServerName misitio.com     ServerName misitio.com
     ServerAlias www.misitio.com     ServerAlias www.misitio.com
-    ErrorLog "logs/misitio.com-error_log+    ErrorLog "logs/misitio.com-error.log
-    CustomLog "logs/misitio.com-access_log" combined+    CustomLog "logs/misitio.com-access.log" combined
          
     <Directory "/var/www/html/misitio.com/usuarios">     <Directory "/var/www/html/misitio.com/usuarios">
Line 719: Line 719:
     ServerName misitio.com     ServerName misitio.com
     ServerAlias www.misitio.com     ServerAlias www.misitio.com
-    ErrorLog ${APACHE_LOG_DIR}/misitio.com-error_log +    ErrorLog ${APACHE_LOG_DIR}/misitio.com-error.log 
-    CustomLog ${APACHE_LOG_DIR}/misitio.com-access_log combined+    CustomLog ${APACHE_LOG_DIR}/misitio.com-access.log combined
  
     BandwidthModule On     BandwidthModule On
Line 775: Line 775:
     ServerAlias www.misitio.com     ServerAlias www.misitio.com
          
-    ErrorLog "misitio.com-error_log+    ErrorLog "misitio.com-error.log
-    CustomLog "misitio.com-access_log" combined+    CustomLog "misitio.com-access.log" combined
          
     ErrorDocument 404 /error_404.html     ErrorDocument 404 /error_404.html
Line 875: Line 875:
     ServerName misitio.com     ServerName misitio.com
     ServerAlias www.misitio.com     ServerAlias www.misitio.com
-    ErrorLog ${APACHE_LOG_DIR}/misitio.com-error_log +    ErrorLog ${APACHE_LOG_DIR}/misitio.com-error.log 
-    CustomLog ${APACHE_LOG_DIR}/misitio.com-access_log combined+    CustomLog ${APACHE_LOG_DIR}/misitio.com-access.log combined
  
     SSLEngine On     SSLEngine On
Line 904: Line 904:
 {{ httpsmisitiocom.png }} {{ httpsmisitiocom.png }}
 <caption>Conexión segura utilizando HTTPS</caption></figure> <caption>Conexión segura utilizando HTTPS</caption></figure>
 +
 +Llegados a este punto nos puede interesar que todo el tráfico de la web se vea forzado a utilizar el protocolo seguro HTTPS. Incluso aunque el usuario introduzca la URL directamente y decide navegar utilizando HTTP (''http://.....'') nosotros podemos redirigirle hacia la opción de utilizar la opción segura.
 +
 +En ese caso podemos incluso configurar el host virtual no seguro con las opciones mínimas para redirigirlo al seguro. No haría falta ni incluir la opción ''DocumentRoot''.
 +
 +<code apache>
 +<VirtualHost *:80>
 +   ServerName www.misitio.com
 +   Redirect / https://www.misitio.com/
 +</VirtualHost>
 +
 +<VirtualHost *:443>
 +  ServerName misitio.com
 +  DocumentRoot . . .
 +  . . .
 +</VirtualHost>
 +</code>
 +
 +Finalmente podemos optar por una redirección permanente (de esta forma así se notificará a los buscadores) modificando la orden ''Redirect'' por la siguiente:
 +
 +<code apache>
 +  . . .
 +  Redirect permanent / https://www.misitio.com/
 +  . . .
 +</code>
  
 === Protección frente a atacantes === === Protección frente a atacantes ===
Line 919: Line 944:
  
 Ver [[apuntes:jmeter|Anexo JMeter]] Ver [[apuntes:jmeter|Anexo JMeter]]
-===== Monitorización ===== 
  
-<code bash> +===== Estadísticas web =====
-santi@zenbook:$ sudo echo "deb http://deb.goaccess.io/ stretch main" >> /etc/apt/sources.list +
-santi@zenbook:$ sudo apt-get install goaccess +
-</code>+
  
-<code bash> +{{ webalizer.png }}
-santi@zenbook:$ sudo goaccess /var/log/apache2/access.log +
-</code>+
  
-<figure> +Webalizer es una aplicación que podemos instalar para procesar el fichero ''log'' de Apache y generar un documento HTML con las estadísticas de nuestro sitio web.
-{{ goaccess2.png }} +
-<caption>Monitorización de Apache en consola</caption></figure>+
  
-<code bash> +Podemos instalarlo utilizando la herramienta ''apt''.
-santi@zenbook:$ sudo goaccess /var/log/apache2/access.log -o /var/www/html/report.html --log-format=COMBINED --real-time-html +
-WebSocket server ready to accept new client connections +
-</code> +
- +
-<figure> +
-{{ goaccess1.png }} +
-<caption>Monitorización de Apache en HTML en tiempo real</caption></figure> +
-===== Estadísticas web ===== +
- +
-=== Webalizer ===+
  
 <code bash> <code bash>
 santi@zenbook:$ sudo apt-get install webalizer santi@zenbook:$ sudo apt-get install webalizer
 </code> </code>
 +
 +Y a continuar utilizar el comando ''webalizer'' para procesar el fichero ''log'' que queramos (en este caso el del sitio raíz) y éste generará una carpeta en ''/var/www/webalizer'' con un sitio web donde podremos visitar diferentes estadísticas sobre el uso del servidor.
  
 <code bash> <code bash>
 santi@zenbook:$ sudo webalizer /var/log/apache2/access.log santi@zenbook:$ sudo webalizer /var/log/apache2/access.log
 </code> </code>
 +
 +Puesto que ahora por defecto en Debian la carpeta raíz para //Apache// es ''/var/www/html'', tendremos que hacer un enlace simbólico dentro de dicha carpeta que apunte a la que //Webalizer// genera para poder visualizar el informe. También podría ser interesante proteger esa carpeta de alguna manera para que no fuera visible para cualquier visitante.
  
 <code bash> <code bash>
Line 967: Line 978:
 {{ webalizer2.png }} {{ webalizer2.png }}
 <caption>Estadísticas web con webalizer</caption></figure> <caption>Estadísticas web con webalizer</caption></figure>
 +
 +===== Monitorización =====
 +
 +{{ goaccess.png }}
 +
 +[[http://goaccess.io|GoAccess]] es una analizador visual de logs de Apache en tiempo real. De esa manera permite monitorizar el acceso y uso al servidor por parte de los usuarios en cada momento con numerosas métricas.
 +
 +Lo primero de todo es instalarlo en nuestro servidor y, puesto que la versión que Debian trae por defecto puede no ser la más reciente, añadiremos al fichero ''sources.list'' de ''apt'' el repositorio oficial de los creadores de la herramienta. Luego instalaremos con ''apt''
 +
 +<code bash>
 +santi@zenbook:$ sudo echo "deb http://deb.goaccess.io/ stretch main" >> /etc/apt/sources.list
 +santi@zenbook:$ sudo apt-get update
 +santi@zenbook:$ sudo apt-get install goaccess
 +</code>
 +
 +Podemos usarla de dos maneras, visualizando los resultados por consola o en formato HTML como una web más.
 +
 +Para visualizarlos desde la consola, basta localizar el fichero log de Apache que queremos monitorizar (en este caso el fichero general, pero podríamos pasar los ficheros ''log'' de los diferentes hosts virtuales que hayamos configurado) y ejecutamos la aplicación tal y como se muestra en el siguiente ejemplo:
 +
 +<code bash>
 +santi@zenbook:$ sudo goaccess /var/log/apache2/access.log -c
 +</code>
 +
 +Y tras elegir el formato de fichero ''log'' que usamos, podemos visualizar algo como la captura siguiente:
 +
 +<figure>
 +{{ goaccess2.png }}
 +<caption>Monitorización de Apache en consola</caption></figure>
 +
 +También podemos pedirle a //GoAccess// que prepare un documento HTML en tiempo real donde podremos ver las estadísticas en tiempo real desde el navegador.
 +
 +<code bash>
 +santi@zenbook:$ sudo goaccess /var/log/apache2/access.log -o /var/www/html/report.html --log-format=COMBINED --real-time-html
 +WebSocket server ready to accept new client connections
 +</code>
 +
 +Y este será el aspecto que tendrá, donde además podremos ir monitorizando el uso del servidor web puesto que se irá actualizando constatemente sin necesidad de recargar la página.
 +
 +<figure>
 +{{ goaccess1.png }}
 +<caption>Monitorización de Apache en HTML en tiempo real</caption></figure>
 +
 ===== Utilizar contenedores con Docker ===== ===== Utilizar contenedores con Docker =====
  
Line 986: Line 1039:
  
 ===== Ejercicios ===== ===== Ejercicios =====
 +
 +  - Configura un servidor Apache según los siguientes requisitos:
 +    * Se necesitan crear 3 sitios web: //agencia.com//, //miblog.com// y //misnoticias.com//
 +    * Los 3 sitios web además tienen además el mismo dominio en .es y quieren que apunte al mismo sitio web
 +    * La idea es que los ''logs'' del servidor web se separen por cada sitio web puesto que así será más fácil revisarlos más adelante en caso de que sea necesario
 +    * El sitio web //agencia.com// tiene página de error personalizada para el caso de //error 404//
 +  - El sitio web //miblog.com// necesita ahora una carpeta con autenticación HTTP. La carpeta se llama ''zonaprivada''. Además, necesita que no se pueda listar el contenido de la carpeta ''img'' desde el navegador
 +  - El sitio web //agencia.com// necesita ahora utilizar conexión segura HTTPS puesto que pondrá en marcha una zona privada para los usuarios. Ya de paso quiere que todo el tráfico utilice ese protocolo por lo que quiere forzar siempre el uso de HTTPS para todo el sitio web
 +  - Pon en marcha el sistema de monitorización //GoAccess// para el sitio //misnoticias.com//
 +  - Configura un contenedor Docker que te permita probar el sitio web de //miblog.com// sin necesidad de montar una máquina virtual o probarlo en tu propio equipo
 +  - Realiza una prueba de rendimiento para ver como se comportará el sitio //agencia.com// cuando haya mil usuarios simultáneamente
 +  - Despliega un contenedor Docker que te permita comprobar si una web estática (sólo HTML/CSS) funciona correctamente en Ubuntu con Apache
 +  - Despliega un contenedor Docker que te permita comprobar si la web del punto anterior funcionará bien con CentOS
 +  - Despliega un contenedor Docker que permita probar alguno de los sitios web dinámicos (PHP/MySQL) realizados en la asignatura de //Desarrollo Web en Entorno Servidor//
  
 ---- ----
apuntes/servidores_web.1509618939.txt.gz · Last modified: 2019/01/04 13:02 (external edit)