Servidor HTTP Apache
El Servidor HTTP Apache es un servicio de red y requiere de ciertos permisos para su ejecución, solo el usuario root
puede configurarlo (usarás el editor de texto nano
) y operar su inicio (/etc/rc.d/rc.httpd start
) y detención
(/etc/rc.d/rc.httpd stop
).
Configuración del Servidor HTTP Apache
Información sobre Apache en el S.O.
Puesto que el Servidor HTTP Apache es un servicio de sistema trabajaremos con la cuenta de usuario root.
El archivo ejecutable del Servidor HTTP Apache se llama
httpd
, en otros sistemas operativos o distribuciones de linux se llamaapache
oapache2
.root@servidor:~# which httpd /usr/sbin/httpd
Para obtener la versión del Servidor HTTP Apache con la cual estamos trabajando:
root@servidor:~# httpd -v Server version: Apache/2.4.25 (Unix) Server built: Dec 23 2016 13:48:14
La documentación oficial del Servidor HTTP Apache para la versión 2.4 se encuentra en http://httpd.apache.org/docs/2.4/.
Para obtener las opciones con las que fue compilado:
root@servidor:~# httpd -V AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message Server version: Apache/2.4.25 (Unix) Server built: Dec 23 2016 13:48:14 Server's Module Magic Number: 20120211:67 Server loaded: APR 1.5.2, APR-UTIL 1.5.4 Compiled using: APR 1.5.2, APR-UTIL 1.5.4 Architecture: 64-bit Server MPM: event threaded: yes (fixed thread count) forked: yes (variable process count) Server compiled with.... -D APR_HAS_SENDFILE -D APR_HAS_MMAP -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled) -D APR_USE_SYSVSEM_SERIALIZE -D APR_USE_PTHREAD_SERIALIZE -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT -D APR_HAS_OTHER_CHILD -D AP_HAVE_RELIABLE_PIPED_LOGS -D DYNAMIC_MODULE_LIMIT=256 -D HTTPD_ROOT="/usr" -D SUEXEC_BIN="/usr/bin/suexec" -D DEFAULT_PIDLOG="/var/run/httpd.pid" -D DEFAULT_SCOREBOARD="logs/apache_runtime_status" -D DEFAULT_ERRORLOG="logs/error_log" -D AP_TYPES_CONFIG_FILE="/etc/httpd/mime.types" -D SERVER_CONFIG_FILE="/etc/httpd/httpd.conf"
Durante su ejecución el Servidor HTTP Apache escribe logs (registros) de las operaciones que realiza, dichos logs los encontrarás en el directorio
/var/log/httpd
.Para determinar su archivo de configuración:
root@servidor:~# httpd -V | grep SERVER_CONFIG_FILE AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message -D SERVER_CONFIG_FILE="/etc/httpd/httpd.conf"
En la mayoría de documentación que encuentres en la web sobre el Servidor HTTP Apache su archivo de configuración se llama
httpd.conf
que dependiendo del sistema operativo o de la distribución de GNU/Linux que uses se ubicará en algún directorio dentro de/etc
. En Slackware Linux el archivo de configuración del Servidor HTTP Apache se ubica en el directorio/etc/httpd
. Ya que el archivo de configuración del Servidor HTTP Apache es muy grande se subdivide en otros archivos de configuración dentro del directorio/etc/httpd/extra
.Para determinar el directorio raíz (DocumentRoot) de los archivos expuestos por Servidor HTTP Apache al exterior:
root@servidor:~# egrep '^DocumentRoot' /etc/httpd/httpd.conf DocumentRoot "/srv/httpd/htdocs"
Nota:
/srv/httpd
es un vínculo a/var/www
, por lo que el directorio/srv/httpd/htdocs
es en realidad el directorio/var/www/htdocs
.Para obtener una lista de los modulos disponibles en el Servidor HTTP Apache:
root@servidor:~# httpd -M AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message Loaded Modules: core_module (static) so_module (static) http_module (static) ... autoindex_module (shared) dir_module (shared) alias_module (shared)
El Servidor HTTP Apache tiene módulos externos a él, los cuales agregan características y opciones que nos pueden ser útiles en ciertas situaciones.
Para determinar si está en ejecución el Servidor HTTP Apache:
root@servidor:~# netstat -plutn Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 601/httpd
En este caso está en ejecución, atendiendo (LISTEN) conexiones en todas las interfaces de red en el puerto TCP 80 (0.0.0.0:80).
Administración del proceso del Servidor HTTP Apache:
De forma manual, por el usuario root:
- Para iniciar al proceso del Servidor HTTP Apache:
apachectl start
- Para detener al proceso del Servidor HTTP Apache:
apachectl stop
- Para reiniciar el proceso del Servidor HTTP Apache:
apachectl restart
Sin embargo, en Slackware Linux existe un script de init que se encarga de esto: /etc/rc.d/rc.httpd
. Esta es
la manera recomendada de administrar el proceso del Servidor HTTP Apache en Slackware Linux. Para ésto debes
de asignar permisos de ejecución al archivo /etc/rc.d/rc.httpd
:
root@servidor:~# chmod +x /etc/rc.d/rc.httpd
- Para iniciar al proceso del Servidor HTTP Apache:
/etc/rc.d/rc.httpd start
- Para detener al proceso del Servidor HTTP Apache:
/etc/rc.d/rc.httpd stop
- Para reiniciar al proceso del Servidor HTTP Apache:
/etc/rc.d/rc.httpd restart
Los anteriores comandos tienen el mismo efecto que el comando apachectl
, únicamente que al momento de iniciar
a Slackware Linux, él se encargará de iniciar automáticamente al Servidor HTTP Apache y de igual forma al momento
de apagar a Slackware Linux, él se encargará de detenerlo.
Configuración básica de Apache
La mayoría de las opciones a configurar del Servidor HTTP Apache se encuentran en su archivo de configuración:
/etc/httpd/httpd.conf
. Cabe hacer notar que el Servidor HTTP Apache con su configuración por default ya funciona,
lo único que configuraremos hasta este momento será su
ServerName con lo que evitaremos ver un mensaje
de advertencia al momento de ejecutarlo:
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1.
Set the 'ServerName' directive globally to suppress this message`.
Nota que las líneas que inician con el carácter #
son comentarios.
Localiza la línea:
#ServerName www.example.com:80
y deja la como:
ServerName localhost:80
Guarda tus modificaciones a
/etc/httpd/httpd.conf
.Recomendación: al momento de hacer una modificación a
/etc/httpd/httpd.conf
revisa que su sintaxis es la correcta. Para esto ejecuta:httpd -t
.root@servidor:~# httpd -t Syntax OK
Reinicia al Servidor HTTP Apache:
/etc/rc.d/rc.httpd restart
Acceso al Servidor HTTP Apache
Para acceder haremos uso de un navegador web, simplemente visita la dirección http://127.0.0.1 o bien
http://localhost y obtendrás el mensaje It works!
en el navegador web por parte del Servidor HTTP Apache.
VirtualHost
Se creará un Host Virtual (VirtualHost) en el Servidor HTTP Apache basado en el Nombre de Dominio
servidor.red.local
, de tal forma que cuando visitemos con el navegador web a
http://servidor.red.local accedamos al contenido del directorio /home/www/servidor.red.local
.
Agrega una nueva entrada en el archivo
/etc/hosts
para relacionar la actual dirección IP de la computadora con el nombre de dominioservidor.red.local
:Obten la dirección IP de la interfaz de red eth0, ya sea con el comando
ifconfig eth0
o bien conip addr show eth0
. En mi caso es10.0.2.15
:root@servidor:~# ifconfig eth0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255 inet6 fe80::a00:27ff:fe26:f0d2 prefixlen 64 scopeid 0x20<link> ether 08:00:27:26:f0:d2 txqueuelen 1000 (Ethernet) RX packets 5352 bytes 1129882 (1.0 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 3282 bytes 512548 (500.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Agrega la siguiente línea al final del archivo
/etc/hosts
en base a la dirección IP de la computadora.10.0.2.15 servidor servidor.red.local
Realiza una prueba enviando un ping al dominio
servidor.red.local
:root@servidor:~# ping -c4 servidor.red.local PING servidor.red.local (10.0.2.15) 56(84) bytes of data. 64 bytes from servidor.red.local (10.0.2.15): icmp_seq=1 ttl=64 time=0.027 ms 64 bytes from servidor.red.local (10.0.2.15): icmp_seq=2 ttl=64 time=0.054 ms 64 bytes from servidor.red.local (10.0.2.15): icmp_seq=3 ttl=64 time=0.041 ms 64 bytes from servidor.red.local (10.0.2.15): icmp_seq=4 ttl=64 time=0.048 ms --- servidor.red.local ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 2999ms rtt min/avg/max/mdev = 0.027/0.042/0.054/0.012 ms
Si todo ha salido bien, puedes continuar.
Modifica el archivo de configuración del Servidor HTTP Apache:
Localiza la línea:
#Include /etc/httpd/extra/httpd-vhosts.conf
y deja la como:
Include /etc/httpd/extra/httpd-vhosts.conf
Localiza la línea:
#LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
y dejala como:
LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
Renombra el archivo
/etc/httpd/extra/httpd-vhosts.conf
:root@servidor:~# mv /etc/httpd/extra/httpd-vhosts.conf /etc/httpd/extra/httpd-vhosts.conf.orig
Crea un nuevo archivo
/etc/httpd/extra/httpd-vhosts.conf
con el siguiente contenido:<VirtualHost *:80> DocumentRoot "/srv/httpd/htdocs" ServerName localhost ErrorLog "/var/log/httpd/error_log" CustomLog "/var/log/httpd/access_log" common </VirtualHost> <VirtualHost *:80> DocumentRoot "/home/www/servidor.red.local" ServerName servidor.red.local ErrorLog "/var/log/httpd/servidor.red.local/error_log" CustomLog "/var/log/httpd/servidor.red.local/access_log" common Options FollowSymLinks RewriteEngine on <Directory "/home/www/servidor.red.local"> AllowOverride FileInfo Require all granted Options +Indexes </Directory> </VirtualHost>
Crea los directorios requeridos según la configuración para el Host Virtual:
root@servidor:~# mkdir -p /home/www/servidor.red.local root@servidor:~# mkdir -p /var/log/httpd/servidor.red.local
Asigna como propietario del directorio
/home/www/servidor.red.local
al usuarioalumno
:root@servidor:~# chown -R alumno /home/www/servidor.red.local
Corrobora la correcta configuración del Servidor HTTP Apache y VirtualHost:
root@servidor:~# httpd -S VirtualHost configuration: *:80 is a NameVirtualHost default server localhost (/etc/httpd/extra/httpd-vhosts.conf:1) port 80 namevhost localhost (/etc/httpd/extra/httpd-vhosts.conf:1) port 80 namevhost servidor.red.local (/etc/httpd/extra/httpd-vhosts.conf:7) ServerRoot: "/usr" Main DocumentRoot: "/srv/httpd/htdocs" Main ErrorLog: "/var/log/httpd/error_log" Mutex rewrite-map: using_defaults Mutex default: dir="/var/run/" mechanism=default PidFile: "/var/run/httpd.pid" Define: DUMP_VHOSTS Define: DUMP_RUN_CFG User: name="apache" id=80 Group: name="apache" id=80
Reinicia al Servidor HTTP Apache para que haga uso de su nueva configuración:
/etc/rc.d/rc.httpd restart
Finalmente ingresa con el navegador web a http://servidor.red.local. Veremos el contenido del directorio
/home/www/servidor.red.local
. Dicho directorio tiene como propietario al usuarioalumno
por lo que podrás crear/subir archivos en él.
Acceso desde Windows a servidor.red.local
En Windows busca un archivo con nombre hosts
(muy similar a /etc/hosts
de GNU/Linux), posiblemente
lo encuentres en el directorio C:\Windows\System32\drivers\etc
, y agrega al final la línea
10.0.2.15 servidor servidor.red.local
Accede con un navegador web desde Windows a http://servidor.red.local.
Uso de otro puerto TCP
Para que el Servidor HTTP Apache atienda solicitudes de red en otro puerto TCP, distinto al puerto TCP 80, se
modifica su archivo de configuración (/etc/httpd/httpd.conf
) así como el archivo de configuración de VirtualHost
(/etc/httpd/extra/httpd-vhosts.conf
).
En el archivo de configuración del Servidor HTTP Apache localiza la línea
Listen 80
y agrega justo despues de ella una línea con la opciónListen 1234
.NOTA: al haber dos opciones Listen con distinto puerto TCP hará que el Servidor HTTP Apache atienda solicitudes de red en ambos puertos TCP.
En el archivo de configuración de VirtualHost modifica el elemento
<VirtualHost *:80>
quedando como<VirtualHost *:1234>
.NOTA: cada elemento VirtualHost queda expuesto en algún puerto TCP establecido por la opción Listen.
Como ejemplo:
root@servidor:~# grep -E '^Listen' /etc/httpd/httpd.conf
Listen 80
Listen 1234
root@servidor:~# grep '<VirtualHost' /etc/httpd/extra/httpd-vhosts.conf
<VirtualHost *:80>
<VirtualHost *:1234>
root@servidor:~# cat /etc/httpd/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/srv/httpd/htdocs"
ServerName localhost
ErrorLog "/var/log/httpd/error_log"
CustomLog "/var/log/httpd/access_log" common
</VirtualHost>
<VirtualHost *:1234>
DocumentRoot "/home/www/servidor.red.local"
ServerName servidor.red.local
ErrorLog "/var/log/httpd/servidor.red.local/error_log"
CustomLog "/var/log/httpd/servidor.red.local/access_log" common
Options FollowSymLinks
RewriteEngine on
<Directory "/home/www/servidor.red.local">
AllowOverride FileInfo
Require all granted
Options +Indexes
</Directory>
</VirtualHost>
NOTA: recuerda ejecutar httpd -t
y httpd -S
para determinar la correcta sintaxis en los archivos de configuración editados.
Al terminar reinicia al Servidor HTTP Apache y con netstat -plutn
observa su ejecución en ambos puertos TCP asignados.
En las lecturas con respecto al protocolo HTTP encontrarás términos como GET, POST, Header o Cabecera, User-Agent, etc. Para que dichos términos tengan un sentido más práctico, mientras el Servidor HTTP Apache está en ejecución, en Firefox pulsa el juego de teclas Ctrl+Shift+Q, lo anterior te abrirá una ventana incrustada en Firefox, dirígete a http://127.0.0.1:1234 y observa la información otorgada por Web Developer Tools en su pestaña Red o Network.
Lecturas
Tecnologías Web por Federico Peinado.
Apache HTTP Server Version 2.4 Documentation. Documentación oficial del Servidor HTTP Apache en su versión 2.4.