Bienvenidos a mi tutorial.
Empezemos!:
Acerca del protocolo HTTP.
HTTP (Hypertext Transfer Protocol, o Protocolo de Trasferencia de Hipertext), es el método utilizado para transferir o transportar información en la Red Mundial (WWW, World Wide Web). Su propósito original fue el proveer una forma depublicar y recupertar documentos HTML.
El desarrollo del protocolo fue coordinado por World Wide Web Consortium y la IETF (Internet Engineering Task Force, o Fuerza de Trabajo en Ingeniería de Internet), culminando con la publicación de variso RFC (Request For Comments), de entre los que destaca el RFC 2616, mismo que define la versión 1.1 del protocolo, que es el utilizado hoy en día.
HTTP es un protocolo de solicitud y respuesta a través de TCP, entre agentes de usuario (Navegadores, motores de índice y otras herramientas) y servidores, regularmente utilizando el puerto 80. Entre la comunicación entre éstos puede intervenir como servidores Intermediarios (Proxies), puertas de enlace y túneles.
URL: http://tools.ietf.org/html/rfc2616
Acerca de Apache.
Apache es un servidor HTTP, de código abierto y licenciamiento libre, que funciona en Linux, sistemas operativos derivados de Unix™, Windows, Novell Netware y otras plataformas. Ha desempeñado un papel muy importante en el crecimiento de la red mundial, y continua siendo el servidor HTTP más utilizado, siendo además el servidor de facto contra el cual se realizan las pruebas comparativas y de desempeño para otros productos competidores. Apache es desarrollado y mantenido por una comunidad de desarrolladores auspiciada por Apache Software Foundation.
URL: http://www.apache.org/
Sustento lógico necesario.
Instalación a través de yum.
Si se utiliza de CentOS 4 o White Box Enterprise Linux 4, solo basta utilizar lo siguiente:
yum -y install httpd
Si se desea que Apache incluya soporte para PHP/MySQL, Perl, Python y SSL/TLS, solo bastará ejecutar:
yum -y install php php-mysql mod_perl mod_python mod_ssl
Instalación a través de Up2date
Si se utiliza de Red Hat™ Enterprise Linux 4, solo basta utilizar lo siguiente:
up2date -i httpd
Si se desea que Apache incluya soporte para PHP/MySQL, Perl, Python y SSL, solo bastará utilizar:
up2date -i php php-mysql mod_perl mod_python mod_ssl
Iniciar servicio y añadir el servicio al arranque del sistema.
Apache es un servicio que por fortuna solo es necesario instalar e iniciar. No requiere modificaciones adicionales para su funcionamiento básico. Para añadir el servicio a los servicios que inician junto con el sistema, solo basta ejecuta:
chkconfig httpd on
Para iniciar el servicio por primera vez, solo basta utilizar:
service httpd start
Para reiniciar el servicio, considerando que se interrumpirán todas las conexiones establecidas en ese momento, solo basta utilizar:
service httpd restart
Si el servicio ya está trabajando, también puede utilizar reload a fin de que Apache vuelva a leer y cargar la configuración sin interrumpir el servicio, y, por ende, las conexiones establecidas.
service httpd reload
Para detener el servicio, solo basta utilizar:
service httpd stop
Procedimientos.
SELinux y Apache.
Si utiliza alguna distribución con núcleo 2.6 basada sobre Red Hat™ Enterprise Linux 4.0, como serían CentOS 4.0 o White Box Enterprise Linux 4.0 en adelante, éstas incluyen SELinux que añade seguridad adicional a Apache, sin embargo algunas opciones impedirán utilizar ciertas funciones en Apache, como directorios virtuales. Ejecute system-config-securitylevel desde el modo gráfico y active la casilla que dice «Disable SELinux Protection for httpd daemon» y haga clic en el botón de «Aceptar». Si no tiene planeado utilizar directorios virtuales, puede dejar desactivada la casilla y aprovechar toda la seguridad adicional que brinda SELinux.
system-config-securitylevel.
system-config-securitylevel.
UTF-8 y codificación de documentos.
UTF-8
UTF-8 es un método de codificación de ASCII para Unicode (ISO-10646), el Conjunto de Caracteres Universal o UCS. éste codifica la mayoría de los sistemas de escritura del mundo en un solo conjunto de caracteres, permitiendo la mezcla de lenguajes y guiones en un mismo documento sin la necesidad de ajustes para realizar los cambios de conjuntos de caracteres.
Cualquier sitio de red que haga uso de bases de datos y documentos HTML suele toparse con problemas cuando se trata de lidiar con el tipo de codificación (UTF-8, ISO-8859-1, etc.), puesto que en algunos casos, por citar un ejemplo, los caracteres latinos se muestran incorrectamente por el cambio de codificación.
Debido a su conveniencia actualmente se está adoptando UTF-8 como codificación para todo, sin embargo aún hay mucho material codificado en, por ejemplo, ISO-8859-1.
Lo correcto es codificar los documentos codificados en ISO8859-1 y otras tablas de caracteres hacia en UTF-8, utilizando métodos como el siguiente:
cd /var/www/html/
for f in *.html
do
vi -c ":wq! ++enc=utf8" $f
done
Si desea continuar viviendo en el pasado y no aceptar el nuevo estándar, también puede desactivar la función en Apache que establece UTF-8 como codificación predefinida. Edite el fichero /etc/httpd/conf/httpd.conf y localice lo siguiente:
AddDefaultCharset UTF-8
Cambie lo anterior por esto otro:
AddDefaultCharset Off
Ficheros de configuración.
Cualquier ajuste que se requiera realizar, ya sea para configurar Sitios de Red virtuales u otra funcionalidad adicional, se puede realizar sin tocar el fichero principal de configuración, utilizando cualquier fichero con extensión *.conf dentro del directorio /etc/httpd/conf.d/.
Directorios virtuales.
Si, por ejemplo, se quisiera añadir el alias para un directorio localizado en /var/ftp/pub/ y el cual queremos visualizar como el directorio /pub/ en Apache, solo bastaría crear un fichero que denominaremos arbitrariamente como el fichero denominado /etc/httpd/conf.d/aliases.conf con el siguiente contenido:
Alias /pub /var/ftp/pub
Si trata de acceder hacia este nuevo directorio virtual con el navegador, notará que no está permitido el acceso. Para poder acceder deberá haber un documento índice en el interior (index.html, index.php, etc) o bien que dicho directorio sea configurado para mostrar el contenido del siguiente modo:
Alias /pub /var/ftp/pub
<Directory "/var/ftp/pub">
Options Indexes Includes FollowSymLinks
AllowOverride all
</Directory>
El parámetro Indexes indica que se deberá mostrar el contenido del directorio. El parámetro FollowSymLinks posibilita poder colocar enlaces simbólicos dentro del directorio los cuales se seguirán. El parámetro Includes especifica que se permite la utilización de los SSI (Server Side Includes) que posibilitan utilizar funciones como autenticación. El parámetro AllowOverrride all posibilita utilizar ficheros .htaccess.
Reinicie o recargue Apache y acceda hacia http://127.0.0.1/pub/ con cualquier navegador de red y visualice el resultado.
Redirección de directorios.
Cuando sea necesario, es posible configurar un directorio en particular para Apache redirija de modo transparente éste y su contenido hacia cualquier otra dirección.
Redirect 301 /webmail http://mail.su-dominio.net/
En el ejemplo anterior, se indica que si se trata de acceder hacia el subdirectorio /webmail en el servidor, Apache deberá redirigir hacia http://mail.su-dominio.net/. El número 301 corresponde al mensaje del protocolo HTTP para indicar que la redirección es permanente. Si por ejemplo hubiese un objeto en /webmail, como por ejemplo /webmail/estadisticas/estadisticas.php, Apache realizará el re-direccionamiento transparente hacia http://mail.su-dominio.net/estadisticas/estadisticas.php.
Tipos de MIME.
Si por ejemplo se quisiera añadir algún tipo de extensión y tipo MIME, como por ejemplo Ogg, se podría generar un fichero que denominaremos arbitrariamente como el fichero /etc/httpd/conf.d/extensiones.conf con el siguiente contenido:
AddType application/ogg .ogg
AddDescription "Ogg Vorbis Audio" .ogg
AddIcon /icons/sound2.png .ogg
Soporte para CGI con extensión *.cgi
Si se quisiera añadir que se reconociera la extensión *.cgi como un guión CGI (Common Gateway Interface), solo bastará añadir un fichero que denominaremos, arbitrariamente, /etc/httpd/conf.d/cgi.conf con el siguiente contenido:
AddHandler cgi-script .cgi
Probando la configuración.
Utilice el editor de texto de su preferencia para crear el fichero /var/www/cgi-bin/tiempo.cgi. Este deberá llevar lo siguiente como contenido:
#!/usr/bin/perl
print "content-type: text/htmlnn";
print scalar localtime;
print "n";
Deberemos de cambiar el permiso del archivo anterior con la siguiente línea de mandato:
chmod 755 /var/www/cgi-bin/tiempo.cgi
Utilice el navegador de red que prefiera y apunte éste hacia http://127.0.0.1/cgi-bin/tiempo.cgi. Si el navegador nos da una salida similar a la siguiente, se habrá configurado exitosamente Apache® para ejecutar guiones CGI:
Tue Jul 05 22:10:41 2005
Problemas posteriores
Antes escribirle al autor de este documento, de recurrir a las listas de soporte o grupos y foros de discusión solicitando ayuda para hacer trabajar un guión CGI en particular, lea cuidadosamente la documentación que acompaña a este y verifique que se han establecido apropiadamente los permisos de lectura, escritura y ejecución, que se han realizado las modificaciones necesarias en los parámetros para el uso del guión en su servidor y que el guión CGI no contenga errores. Recurra al autor de guión CGI o binario si necesita ayuda.
Error más común número 1.
Forbidden
You don't have permission to access /algun/directorio/guion.cgi on this server
Significa que el archivo no cuenta con los permisos apropiados de lectura, escritura y ejecución. La mayoría guiones CGI que encontrará en Internet necesitarán al menos permiso 755 para poder ser utilizados.
Error más común número 2.
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Significa que hay problemas con el guión CGI en si y no con Apache®. En la mayoría de los casos se trata de ficheros que fueron elaborados desde un editor de texto en Windows®, cuyo retorno de carro es distinto al de los sistemas operativos basados sobre UNIX®, por lo cual se deberá utilizar el mandato dos2unix sobre dichos ficheros. En otros casos, algo menos frecuente, se requerirá que el administrador revise línea por línea para localizar un posible error o parámetro incorrecto. Cuando aplique, verifique que la primera línea del guión que apunta hacia donde se encuentra el mandato perl sea correcta. Verifique también si el directorio que albergue el guión CGI requiere algún permiso en particular, como sería 777 en el caso de algunos guiones CGI.
Robo de imágenes.
Suele ocurrir que los administradores de algunos sitios encuentran fácil utilizar imágenes, y otros tipos de contenido, vinculando desde sus documentos hacia los objetos en el servidor. Esto consume ancho de banda adiconal y es una práctica poco ética. En el siguiente ejemplo, considerando que se tiene un directorio /var/www/html/imagenes, y se desea proteger éste para que solo se permita utilizar su contenido si es referido desde el mismo servidor, se utilizaría lo siguiente:
# Se permite al propio servidor
SetEnvIf Referer "^http://www.midominio.org/" local_referal
# se permite aceder directamente a la imagen o bien si
# no se especifica en el navegador la información de referente.
SetEnvIf Referer "^$" local_referal
<Directory "/var/www/html/imagenes/">
Order Deny,Allow
Deny from all
Allow from env=local_referal
</Directory>
La configuración anterior puede añadirse en cualqueir fichero *.conf dentro del directorio /etc/httpd/conf.d/.
Modificaciones necesarias en el muro cortafuegos.
Si se utiliza un cortafuegos con políticas estrictas, como por ejemplo Shorewall, es necesario abrir el puerto 80 por TCP (HTTP).
Las reglas para el fichero /etc/shorewall/rules de Shorewall correspondería a algo similar a lo siguiente:
#ACTIONSOURCEDESTPROTO DESTSOURCE
#PORTPORT(S)1
ACCEPTnetfwtcp80
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Bueno, espero que os sirva y os haya gustado, un saludo, dejen unos puntos porfavor!