Está en la página 1de 24

Instalar, configurar y solucionar problemas en el

servidor web de Linux (Apache)


2017-03-212019-01-10 Comment(0)

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.

Tabla de Contenidos

 1 Cómo funciona un servidor web


 2 Implementaciones del servidor web de Linux
 3 Entender HTTP
 4 Instalar el servidor web Apache
 5 Configurando servidor web Apache
 5.1 Opción ServerRoot
 5.2 Opción Listen
 5.3 Opción ServerName
 5.4 Opción DocumentRoot
 5.5 Opción MaxRequestWorkers
 5.6 Opción LoadModule
 5.7 Opción Include
 5.8 Opción UserDir
 5.9 Opción Alias
 5.10 Opción ErrorLog
 5.11 Opción VirtualHost
 5.12 Tipos de hosts virtuales
 6 Ownership o propiedad de los procesos de Apache
 6.1 Opción User
 6.2 Opción group
 7 Soporte suEXEC
 8 Autenticación Apache
 9 Solución de problemas del servidor web Apache
Cómo funciona un servidor web
Primero, el 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:
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.
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.

Agregar una regla para el puerto 80


Si estás usando un firewall como iptables:
$ iptables -I INPUT 1 -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

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


$ firewall-cmd --add-port=80/tcp
Arranque del servicio
Para iniciar tu servicio y habilitarlo en el arranque escribe lo siguiente:
1 $ systemctl start httpd
2
3 $ systemctl enable httpd

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:

1 <VirtualHost www.example.com>
2
3 ServerAdmin admin@example.com
4
5 DocumentRoot /home/adam/public_html
6
7 ServerName www.example.com
8
9 ErrorLog /var/log/users/adam/error_log
10
11 </VirtualHost>

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í:

1 NameVirtualHost *
2
3 <VirtualHost *>
4
5 ServerName www.example.com
6
7 DocumentRoot "/home/user1/public_html/"
8
9 </VirtualHost>
10
11 <VirtualHost *>
12
13 ServerName www.example2.com
14
15 DocumentRoot "/ home/user2/public_html/"
16
17 </VirtualHost>
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:

1 <VirtualHost 192.168.1.2>
2
3 ServerName www.example.com
4
5 DocumentRoot "/home/user1/public_html/"
6
7 </VirtualHost>
8
9 <VirtualHost 192.168.1.3>
10
11 ServerName www.example2.com
12
13 DocumentRoot "/ home/user2/public_html/"
14
15 </VirtualHost>
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:


1 <VirtualHost www.example.com>
2
3 SuExecUserGroup adam adamGroup
4
5 </VirtualHost>
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:

1 <Location /vip>
2
3 AuthName "test"
4
5 AuthType Basic
6
7 AuthUserFile /home/adam/.htpasswd
8
9 Order deny,allow
10
11 require valid-user
12
13 </Location>
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

También podría gustarte