Administración del servidor

Instalar, configurar y solucionar problemas en el servidor web de Linux (Apache)

En este tutorial, hablaremos sobre el servidor web de Linux o servidor web Apache específicamente, sobre cómo instalarlo y configurarlo para mostrar tu contenido a otras personas.

Un servidor web es un sistema que manipula las solicitudes a través del protocolo HTTP, solicita un archivo del servidor y responde con el archivo solicitado, lo que puede darte una idea de que los servidores web solo se utilizan para la web.


De hecho, los servidores web también se pueden encontrar integrados en dispositivos como impresoras, enrutadores, ente otros, cuando abres la página de configuración del enrutador, hay un servidor web detrás de este.

Cuando abres la página de configuración de la impresora, también hay un servidor web detrás de ella que atiende sus solicitudes, por lo tanto, los servidores web son importantes hoy en día porque son utilizados en todas partes.

 

 

Cómo funciona un servidor web

Primero, tu navegador envía una solicitud al servidor.

El servidor toma el archivo o la página solicitada y lo mapea en el archivo correspondiente del servidor. Este vuelve a enviar el archivo al navegador con cierta información, como su tipo MIME, la longitud del contenido y otra información útil.

A veces, el archivo solicitado es una página estática como páginas HTML o páginas dinámicas como PHP, Java, Perl o cualquier otro lenguaje del lado del servidor.

Por ejemplo, cuando escribes www.yourDomain.com, el navegador consulta al servidor DNS la dirección IP de la computadora: www.yourDomain.com. Una vez que el navegador obtiene la respuesta del DNS, inicia una conexión TCP en el puerto 80 y solicita la página web predeterminada, luego esta página es enviada hacia ti y eso es todo.

 

Implementaciones del servidor web de Linux

Existen muchas implementaciones de servidores web Linux disponibles para tu utilización:

  • Servidor Apache
  • Nginx
  • Lighttpd
  • Apache Tomcat
  • Demonio Monkey HTTP (utilizado especialmente para sistemas integrados)

Hay más servidores web Linux, pero esta es la lista de los servidores web más utilizados.

Entre los servidores antes mencionados los más utilizados son Apache y Nginx.

En esta publicación, utilizaremos el servidor Apache por varias razones:

  • Es estable.
  • Es flexible
  • Es seguro

Instalaremos y configuraremos el servidor Apache en Linux, pero primero repasemos algunos de los conceptos básicos del protocolo HTTP.

 



Entender HTTP

Cuando solicitas un archivo o una página desde un servidor web, el cliente se conecta primero al servidor en el puerto 80. Luego de una conexión exitosa, el cliente enviara comandos HTTP (también métodos) al servidor. Este comando incluye un encabezado de solicitud que incluye información sobre el cliente.

Para ver estos encabezados de solicitud en chrome, abre los devtools, luego abre el panel de red y visite google.com. Verifica los encabezados de solicitud, deberías ver algo como esto:

Linux Web Server Request Header

El encabezado de solicitud también incluye información sobre el cliente, como el agente de usuario y los formatos aceptados.

Se puede enviar información adicional con el encabezado de solicitud. Por ejemplo, si hace clic en un enlace que abrirá otro sitio web, el encabezado incluirá el sitio de referencia.

Después de recibir el encabezado de la solicitud por completo, el servidor responde con el archivo o la página solicitada junto con un encabezado de respuesta.

El encabezado de respuesta incluye información sobre el contenido recibido, su tipo y otra información.

Linux Web Server response header

Puedes verificar los encabezados de respuesta desde el panel de red del navegador.

 


Instalar el servidor web Apache

Para instalar el servidor el servidor web Apache en distribuciones basadas ​​en Red Hat utiliza el siguiente comando:

$ dnf -y httpd

O si estás utilizando una distribución basada en Debian, puedes instalarla de la siguiente forma:

$ apt-get -y install apache2

El servicio del servidor web Apache se denomina

httpd en distribuciones basados ​​en Red Hat como CentOS, mientras que se llama apache2 en las distribuciones basadas en Debian.

Si estás usando un firewall como iptables , deberías agregar una regla para el puerto 80..

$ iptables -I INPUT 1 -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

O si estás utilizando firewalld, puede utilizar el siguiente comando:

$ firewall-cmd --add-port=80/tcp

Para iniciar tu servicio y habilitarlo en el arranque escribe lo siguiente:

Para iniciar tu servicio y habilitarlo en el arranque escribe lo siguiente:

$ systemctl status httpd

Ahora abre tu navegador y visita http: // localhost o http: // [:: 1] / si estás usando IP v6 y si tu instalación funciona bien, deberías ver tu página de inicio de HTML.

 

Configurando servidor web Apache

Puedes agregar archivos a Apache en el directorio  /var/www/html para páginas de nivel superior.

Solo recuerde asegurarte de que cualquier archivo o directorio colocado en ese directorio sea legible por todos.

La página de índice predeterminada es index.html.

Los archivos de configuración de Apache están en el directorio /etc/httpd/conf/ .

En sistemas basados ​​en Debian como Ubuntu, puedes encontrarlos en el archivo  /etc/apache2/apache2.conf.

No podemos analizar todas las opciones de Apache en una sola publicación, pero discutiremos las opciones más importantes.

Puedes llamarlas opciones o directivas.

Opción ServerRoot

Esta opción especifica la carpeta de configuración para el servidor web Apache. En las distribuciones basadas en Red Hat, la opción ServerRoot es /etc/httpd/directory. En las distribuciones de Debian, la opción ServerRoot seria /etc/apache2/.

ServerRoot /etc/httpd

Opción Listen

Este es el puerto que usará el servidor web Apache para esperar las conexiones entrantes.

El valor predeterminado para esta opción es 80 para conexiones no seguras y 443 para conexiones seguras.

Si tienes varias direcciones IP en tu servidor, puedes asignar qué IP debe escuchar la conexión utilizando la opción Listen.

Puedes especificar un puerto diferente que no sea 80, solo asegúrese de que no esté en uso.

También se pueden ejecutar muchos servidores HTTP en el mismo hardware cada uno en un puerto único.

Cuando un servidor se ejecuta en un puerto no estándar, como el puerto 8080, requerirá que el número de puerto se indique explícitamente:

www.example.com:8080

Listen 80

Opción ServerName

Esta opción especifica el nombre de host del servidor web que aparece a los visitantes.

ServerName FQDN

Opción DocumentRoot

Esto define la ruta que contendrán tus archivos que serán servidos.

La ruta predeterminada es /var/www/html.

DocumentRoot /var/www/html

Opción MaxRequestWorkers

Esta opción establece la cantidad máxima de conexiones simultáneas que recibirá el servidor.

Opción LoadModule

Esta opción se usa para cargar módulos en el servidor web Apache.

Hay muchos módulos de Apache como estos:

mod_cgid: Este módulo se usa para ejecutar scripts CGI usando el servidor web Apache..

mod_ssl: Proporciona conexiones seguras a través de protocolos SSL y TLS.

mod_userdir: Este módulo te permite servir contenido de los directorios específicos de los usuarios.

Si quisieras deshabilitar la carga de un módulo específico, puede comentar la línea del módulo de carga que contiene ese módulo.

O si utiliza distribuciones basadas en Debian como Ubuntu, puede utilizar estos comandos:

$ a2enmod modulename

Este comando para habilitar el módulo.

$ a2dismod modulename

Este comando para deshabilitar el módulo.

Todos estos comandos lo hacen es crear un enlace simbólico en el directorio  /etc/apache2/mods-enabled

con el archivo que contiene el módulo que desea habilitar. Todos los archivos de este directorio están incluidos en la configuración de Apache de forma predeterminada, por lo que cualquier archivo que exista en este directorio se incluirá.

Y si usa a2dismod, se eliminará el enlace simbólico.

Si habilita o deshabilita un módulo, debe volver a cargar o reiniciar el servidor web Apache.

LoadModule mod_cgid.so

Opción Include

Esta opción te permite incluir otros archivos de configuración.

Puedes almacenar toda la configuración para diferentes dominios virtuales, y Apache los incluirá en tiempo de ejecución.

Include filePath

Opción UserDir

Esta opción especifica el directorio que contendrá los archivos a los que se podrá acceder a través del servidor web. Este directorio generalmente se llama public_html y está ubicado en el directorio de inicio del usuario.

Por ejemplo, si tienes un usuario Adam que quiere que su contenido web esté disponible a través del servidor web Apache.

Primero, hacemos una carpeta public_html en su directorio de inicio.

A continuación, establece el permiso para la carpeta public_html:

$ chmod 644 public_html

Ahora, si ponemos un archivo index.html, podrás acceder a través del navegador de esta manera:

http://YOURHOSTNAME/~adam

UserDir public_html

Opción Alias

Esta opción especifica la ubicación de los archivos que están fuera de la ubicación de DocumentRoot y que necesitan ser servidos por el servidor web Apache.

Como por ejemplos archivos fuera del DocumentRoot que deseas que estén disponibles para los visitantes.

Alias URL_Path Actual_Path

Opción ErrorLog

Esta opción especifica el archivo de registro de errores para el servidor web Apache..

ErrorLog /var/log/httpd/error_log

Opción VirtualHost

Esta opción te permite alojar múltiples sitios web en el mismo servidor.

La idea es que el contenido se sirva en función del nombre de host solicitado.

Para configurar un host virtual para el host www.example.com. En primer lugar, debes crear una opción de VirtualHost en el archivo /etc/httpd/conf/httpd.conf.

Luego especifica el DocumentRoot y ServerName de esta manera:

Ten en cuenta que la opción ServerName debe poder resolverse a través del DNS.

Estas son las opciones de Apache más usadas..

Tipos de hosts virtuales

Hay dos tipos de hosts virtuales que puedes definir en el servidor web Apache:

  • Hosts virtuales basados ​​en nombres
  • Hosts virtuales basados ​​en IP

La directiva NameVirtualHost define qué direcciones pueden ser hosts virtuales; el asterisco (*) significa cualquier nombre o dirección en este servidor. Puedes escribirlos así:

Si tiene más de una dirección IP y deseas utilizar un certificado SSL, el sitio web debe estar en una dirección IP dedicada. Puedes escribir todos los hosts virtuales basados ​​en IP de la siguiente manera:

 


Ownership o propiedad de los procesos de Apache

Sabemos por la publicación Gestión de procesos en Linux, que cada proceso hereda sus permisos de su proceso principal.

Este hecho es cierto para todos los procesos, excepto para las aplicaciones con los bits SETUID, que heredan los permisos del propietario, no el proceso principal. Un buen ejemplo es /bin/su.

Si un usuario normal ejecuta el programa /bin/su, el programa, no hereda el permiso de Adam, pero actúa como un usuario raíz que lo ejecuta.

Dado que el servidor web Apache necesita vincular el puerto 80, y esto necesita privilegios de root.

Después de enlazar al puerto 80, Apache puede ejecutarse como un usuario normal y leer solo los archivos que tienen permisos de lectura.

Según la distribución de Linux que utilices , el usuario podría ser uno de los siguientes:

nadie, www, apache, www-data o daemon.

Retrasé la introducción de dos opciones más para apache hasta llegar a ese punto.

Opción User

Esto especifica la identificación de usuario que el servidor web usará para responder solicitudes.Esto especifica la identificación de usuario que el servidor web usará para responder solicitudes.

User www-data

Opción group

Esto especifica el grupo que el servidor web Apache usará para leer archivos.

Group www-data

Security is very important for sites that use executable scripts such as CGI or PHP scripts.

La seguridad es muy importante para los sitios que utilizan scripts ejecutables como CGI o PHP.

El uso tendrá permisos para leer y escribir el contenido de todos los sitios en el servidor. Pero queremos asegurarnos de que solo los miembros de un sitio en particular puedan leer su propio sitio.

Esto es muy importante porque si un sitio se ve comprometido, el atacante podrá leer todos los archivos, ya que el usuario de apache tiene permiso para hacerlo.

Entonces, ¿cómo resolver este problema?

 


Soporte suEXEC

Un método popular es usar suEXEC, un programa que se ejecuta con permisos de root y hace que los programas CGI se ejecuten como las ID de usuarios y grupos de un usuario específico, no del usuario del servidor Apache.

Puedes especificar el usuario en cada host virtual de esta manera:

Así de simple.

 

Autenticación Apache

Es posible que desee restringir algunas partes a visitantes específicos. Es como un directorio con contraseña.

En Apache, puedes almacenar un archivo de información de autenticación llamado .htpasswd.

Puedes utilizar el comando htpasswd para hacer eso.

Primero, crea el. archivo htpasswd utilizando el comando htpasswd:

$ htpasswd -c /home/adam/.htpassswd myuser

La opción -c es necesaria la primera vez que ejecuta htpasswd, pero cuando agregues más usuarios no debes usar -c porque sobrescribirás el archivo.

Luego crea un archivo .htaccess en la carpeta public_html y escribe lo siguiente:

Se requiere AuthName, puede usar cualquier cadena que desees.

AuthType Basic dice que está utilizando el archivo de usuario htpasswd.

AuthUserFile apunta al archivo que contiene la contraseña generada desde el comando htpasswd.

La línea de Order indica que Apache debe denegar el acceso de forma predeterminada y solo permite el acceso a los usuarios especificados en el archivo htpasswd.

La directiva require significa que cualquier usuario en el archivo htpasswd está permitido.

 

Solución de problemas del servidor web Apache

Si modificas el archivo httpd.conf y reinicias o recarga el servidor web Apache y no funcionó, entonces escribiste una configuración de forma incorrecta; sin embargo, este no es el único caso en el que necesita solucionar problemas de Apache, puede revisar el log (archivos de registro) para ver el funcionamiento del servicio, poder diagnosticar el problema y como resolverlo.

Los dos archivos principales de logs para apache son error_log y access_log.

Puedes encontrar estos archivos en el directorio  /var/log/httpd/  en distribuciones basadas ​​en Red Hat, o en  /var/log/apache2/  si estás utilizando distribuciones basadas en Debian.

El archivo access_log contiene todas las solicitudes al servidor web Apache con los detalles sobre el cliente que solicitó ese recurso.

El archivo error_log contiene errores del servidor web Apache.

Puede usar el comando tail para ver el archivo de registro:

$ tail -f /var/log/httpd/error_log

Te recomiendo que revises la publicación del Servidor syslog de Linux para conocer más sobre los logs o archivos de registro

Espero que tengas una excelente experiencia con el servidor web Linux y sea fácil e interesante. Vuelve pronto.

Gracias.

Mokhtar Ebrahim
Estoy trabajando como administrador de sistemas Linux desde 2010. Soy responsable de mantener, proteger y solucionar problemas de servidores Linux para múltiples clientes de todo el mundo. Me encanta escribir guiones de shell y Python para automatizar mi trabajo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *