Servidor Web en Windows en Linux y en MAC OS X
Ahora veremos como en las tres plataformas podemos habilitar un servidor web con unos sencillos pasos.
Pero..que es un servidor web:
Un servidor web es un programa que implementa el protocolo HTTP (HyperText Transfer Protocol). Este protocolo pertenece a la capa de aplicación del modelo OSI y está diseñado para transferir lo que llamamos hipertextos, páginas web o páginas HTML (HyperText Markup Language): textos complejos con enlaces, figuras, formularios, botones y objetos incrustados como animaciones o reproductores de música.
Es un programa que se ejecuta continuamente en un ordenador (también se emplea el término para referirse al ordenador que lo ejecuta), manteniéndose a la espera de peticiones por parte de un cliente (un navegador web) y que responde a estas peticiones adecuadamente, mediante una página web que se exhibirá en el navegador o mostrando el respectivo mensaje si se detectó algún error.
Instalación y prueba de Servidor Web en Windows
Lo que haremos primero es ir a la página web para descargar el paquete que nos permitirá descargar los archivos necesarios para la instalación del Servidor Web.

Una vez nos descarguemos el ejecutable y lo ejecutemos hará una serie de descargas para sus archivos.

Una vez se haya bajado el instalador necesario podremos elegir los componentes que queramos.

Elegimos lo que queramos y empezamos con la instalación:

Aquí tenemos un resumen de la instalación. Si estamos de acuerdo con lo que hemos seleccionado podemos continuar.

El instalador de Web Platform descargará las aplicaciones que necesite.

Se irán descargando y se irán instalando.
Una vez instalado veremos como queda ISS funcionando.

ISS también dispone de un panel de configuración

Y ahora veremos como queda el servidor web fucionando.

Y hasta aquí la configuración del servidor web en Windows.
Instalación en Linux
Lo que haremos será instalar los paquetes necesarios.

El comando que se ha de ejecutar como root es:
aptitude install libapache2-mod-chroot apache2 libapache2-mod-php5 php5-cli php5-common php5-cgi php5-mysql mysql-server-5.0 mysql-client-5.0 php5-gd sudo
Con esto tendremos el servidor web instalado. Ahora veremos como funciona

Y hasta aquí la configuración del servidor web en Linux.
Instalación del Servidor Web en MAC OS X
Primero de todo nos vamos a Preferencias.

Nos vamos al apartado de comparir o sharing

En sharing habilitamos la parte de Servidor Web

Y aqui podemos ver el servidor web funcionando.

Y hasta aqui como tener un servidor web funcionando.
Apache en Ubuntu-Segunda Parte
Ya vimos hace un tiempo la primera parte de apache en Ubuntu que explicaba la instalación y configuración además de un par de directivas
Hoy seguiremos explicando un par de directivas mas
La primera será la de que cada usuario pueda colgar sus páginas web, para ello usaremos la directiva UserDir nombre de la carpeta el httpd.conf lo hemos de dejar así:
marc@seifreed:~$ sudo cat /etc/apache2/httpd.conf
[sudo] password for marc:
ServerName localhost
Include /etc/apache2/mods-available
DirectoryIndex principal.html
UserDir web
Esta directiva establece que todos los usuarios que tengan en su /home el nombre de la carpeta que haya al lado del UserDir. Cuando hayamos dejado esto así, reiniciamos el apache:
marc@seifreed:~$ sudo /etc/init.d/apache2 restart
Si nos sale al final de todo Ok podemos seguir..
Yo con el usuario familia en su /home ya e creado la carpeta web, aparte de la página principal.html para hacer la prueba, para comprobar que todo ha salido bien abrimos el navegador y ponemos http://localhost/~familia/
y nos ha de salir algo parecido a esto:

Ahora lo que haremos será probar otra de las directivas de apache se trata la de denegar el poder visualizar las páginas web si no conocemos el usuario y el password de acceso. Es decir poder hacer páginas privadas.
Para eso harán falta varias cosas, primero preparemos el http.conf:
marc@seifreed:~$ sudo cat /etc/apache2/httpd.conf
ServerName localhost
Include /etc/apache2/mods-available
DirectoryIndex principal.html
UserDir web
<Directory /home/familia/web>
DirectoryIndex principal.html
AuthType Basic
AuthName “Introduce usuario y password”
AuthUserFile /home/familia/claves/passwords
Require user pruebas
</Directory>
El archivo de configuración hace lo siguiente, establece una directiva que afecta a la carpeta de /home/familia/web que es como hemos llamado a la carpeta de donde todos los usuarios podrán colgar las páginas webs.
Lo que hay dentro de las comillas de AuthName será el mensaje que saldrá cuando se intenta visualizar la página
Y el AuthUserFile será donde irá almacenada la contraseña, que es MUY IMPORTANTE que no sea visible via web ese fichero. Y luego el Require user será el nombre de usuario para visualizar la página. No hace falta que sea usuario de la máquina ni nada por el estilo.
Para crear un fichero con hacer un touch passwords es suficiente, para establecer la contraseña lo haremos así:
familia@seifreed:~/claves$ htpasswd -c passwords pruebas
New password:
Re-type new password:
Adding password for user pruebas
Entonces cuando queremos ir a visualizar la página igual que antes.. nos sale esto:
http://localhost/~familia/
Sólo hemos de poner el usuario pruebas con el passwords que le hayamos puesto anteriormente, en mi caso pruebas
Si no introduces bien el usuario y el password no podremos ve la página en sí.
Ahora como último paso denegaremos que un usuario pueda subir páginas webs a su directorio y eso lo haremos con UserDir disabled y el nombre del usuario. Eso se coloca dentro del httpd.conf, y cuando lo hayamos echo se reinicia el apache y listo!
Y eso es todo!
Apache en Windows-Primera Parte
En el artículo anterior vimos como instalar Apache en Ubuntu y vimos alguna que otra configuración.
Ahora la instalación la haremos sobre Windows, no volveré a explicar que es un servidor web ni nada por el estilo, si queréis documentaros sobre eso visitad el POST anterior.
http://seifreed.wordpress.com/2009/02/24/apache-en-ubuntu-primera-parte/
Lo que primero haremos será ir a la página oficial de apache

Después de ir allí nos fijamos que en la parte de Apache 2.2.11 hay un link que pone Download le damos ahí y nos lleva a otra página desde donde podremos descargar Apache para Windows.

Una vez hemos descargado el archivo empezamos con la instalación, Le damos a siguiente hasta que nos salga una pantalla como esta:
En Network domain si lo queremos es hacer las pruebas en local, ponemos localhost, si por el contraio la web estará visible para otros hemos de poner el nombre del DNS correspondiente donde lo tenemos registrado, ejemplo: seifreed.es
Luego en apartado de server name el nombre del DNS.
Y luego abajo tenemos la dirección del WEBMASTER.
Luego seguimos con la instalación:

Una vez haya acabado la instalación vamos al navegador y le ponemos lo mismo que le habiamos puesto en el apartado de Network domain.
En mi caso localhost:

Como veis me sale la página por defecto del apache. Para poner las webs el directorio por defecto se encuentra en:
C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs
Y el archivo de configuración del Apache se encuentra:
C:\Archivos de programa\Apache Software Foundation\Apache2.2\conf
Las configuraciones son las mismas para UBuntu que para WIndows para mas dudas miradlo de aquí:
http://seifreed.wordpress.com/2009/02/24/apache-en-ubuntu-primera-parte/
Saludos espero que os sirva!
Apache en Ubuntu-Primera Parte
Hoy vamos a configurarnos un servidor WEB, de echo, el servidor WEB mas utilizado APACHE.
Todavía no sabemos lo que es un servidor WEB?
Miremos en la Wikipedia:
Un servidor web es un programa que implementa el protocolo HTTP (hypertext transfer protocol). Este protocolo pertenece a la capa de aplicación del modelo OSI y está diseñado para transferir lo que llamamos hipertextos, páginas web o páginas HTML (hypertext markup language): textos complejos con enlaces, figuras, formularios, botones y objetos incrustados como animaciones o reproductores de música.
De ahí que podemos sacar? Pues que interpreta un protocolo que pertenece a la capa de aplicación y que es capaz de Interpretar ese código.
Sigamos leyendo:
Un servidor web se mantiene a la espera de peticiones HTTP por parte de un cliente HTTP que solemos conocer como navegador. El cliente realiza una petición al servidor y éste le responde con el contenido que el cliente solicita. A modo de ejemplo, al teclear www.wikipedia.org en nuestro navegador, éste realiza una petición HTTP al servidor de dicha dirección. El servidor responde al cliente enviando el código HTML de la página; el cliente, una vez recibido el código, lo interpreta y lo exhibe en pantalla. Como vemos con este ejemplo, el cliente es el encargado de interpretar el código HTML, es decir, de mostrar las fuentes, los colores y la disposición de los textos y objetos de la página; el servidor tan sólo se limita a transferir el código de la página sin llevar a cabo ninguna interpretación de la misma.
Es decir, que nos aparece un concepto de CLIENTE-SERVIDOR
La instalación la haremos sobre Ubuntu. Apache es multiplataforma, también tiene su versión para Windows y además es un proyecto de código libre.
Empezemos a hacer la instalación:
marc@seifreed:~$ sudo aptitude install apache2
[sudo] password for marc:
Leyendo lista de paquetes… Hecho
Creando árbol de dependencias
Leyendo la información de estado… Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes… Hecho
Escribiendo información de estado extendido… Hecho
Se instalarán los siguiente paquetes NUEVOS:
apache2 apache2-mpm-worker{a} apache2.2-common{a}
0 paquetes actualizados, 3 nuevos instalados, 0 para eliminar y 0 sin actualizar.
Necesito descargar 1062kB de ficheros. Después de desempaquetar se usarán 4317kB.
¿Quiere continuar? [Y/n/?] Y
Escribiendo información de estado extendido… Hecho
Des:1 http://es.archive.ubuntu.com intrepid/main apache2.2-common 2.2.9-7ubuntu3 [778kB]
Des:2 http://es.archive.ubuntu.com intrepid/main apache2-mpm-worker 2.2.9-7ubuntu3 [240kB]
Des:3 http://es.archive.ubuntu.com intrepid/main apache2 2.2.9-7ubuntu3 [44,7kB]
Descargados 1062kB en 4s (253kB/s).
Seleccionando el paquete apache2.2-common previamente no seleccionado.
(Leyendo la base de datos …
201103 ficheros y directorios instalados actualmente.)
Desempaquetando apache2.2-common (de …/apache2.2-common_2.2.9-7ubuntu3_i386.deb) …
Seleccionando el paquete apache2-mpm-worker previamente no seleccionado.
Desempaquetando apache2-mpm-worker (de …/apache2-mpm-worker_2.2.9-7ubuntu3_i386.deb) …
Seleccionando el paquete apache2 previamente no seleccionado.
Desempaquetando apache2 (de …/apache2_2.2.9-7ubuntu3_all.deb) …
Procesando activadores para ufw …
Procesando activadores para man-db …
Configurando apache2.2-common (2.2.9-7ubuntu3) …
Enabling site default.
Enabling module alias.
Enabling module autoindex.
Enabling module dir.
Enabling module env.
Enabling module mime.
Enabling module negotiation.
Enabling module setenvif.
Enabling module status.
Enabling module auth_basic.
Enabling module deflate.
Enabling module authz_default.
Enabling module authz_user.
Enabling module authz_groupfile.
Enabling module authn_file.
Enabling module authz_host.Configurando apache2-mpm-worker (2.2.9-7ubuntu3) …
* Starting web server apache2 apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName
[ OK ]Configurando apache2 (2.2.9-7ubuntu3) …
Leyendo lista de paquetes… Hecho
Creando árbol de dependencias
Leyendo la información de estado… Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes… Hecho
Escribiendo información de estado extendido… Hecho
Si utilizo aptitude es para que me instale las dependecias que necesite.
Miremos como funciona y como queda ponemos localhost en el navegador:

Como también querremos luego que aparte de Interpretar HTML, interprete PHP instalaremos el módulo PHP.
Instalamos el módulo PHP:
pruebas@pruebas:~$ sudo aptitude install php5
Leyendo lista de paquetes… Hecho
Creando árbol de dependencias
Leyendo la información de estado… Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes… Hecho
Se instalarán los siguiente paquetes NUEVOS:
apache2-mpm-prefork{a} libapache2-mod-php5{a} php5 php5-common{a}
Se ELIMINARÁN los siguientes paquetes:
apache2-mpm-worker{a}
0 paquetes actualizados, 4 nuevos instalados, 1 para eliminar y 0 sin actualizar.
Necesito descargar 3084kB de ficheros. Después de desempaquetar se usarán 6300kB.
¿Quiere continuar? [Y/n/?] y
Escribiendo información de estado extendido… Hecho
Des:1 http://es.archive.ubuntu.com intrepid/main apache2-mpm-prefork 2.2.9-7ubuntu3 [235kB]
Des:2 http://es.archive.ubuntu.com intrepid-updates/main php5-common 5.2.6-2ubuntu4.1 [365kB]
Des:3 http://es.archive.ubuntu.com intrepid-updates/main libapache2-mod-php5 5.2.6-2ubuntu4.1 [2482kB]
Des:4 http://es.archive.ubuntu.com intrepid-updates/main php5 5.2.6-2ubuntu4.1 [1116B]
Descargados 3084kB en 12s (249kB/s).
dpkg: apache2-mpm-worker: problemas de dependencias, pero se desinstalará de todas formas
tal y como se solicitó:
apache2 depende de apache2-mpm-worker (>= 2.2.9-7ubuntu3) | apache2-mpm-prefork (>= 2.2.9-7ubuntu3) | apache2-mpm-event (>= 2.2.9-7ubuntu3); sin embargo:
El paquete `apache2-mpm-worker’ va a ser desinstalado.
El paquete `apache2-mpm-prefork’ no está instalado.
El paquete `apache2-mpm-event’ no está instalado.
(Leyendo la base de datos …
108120 ficheros y directorios instalados actualmente.)
Desinstalando apache2-mpm-worker …
* Stopping web server apache2 apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName
… waiting [ OK ]
Seleccionando el paquete apache2-mpm-prefork previamente no seleccionado.
(Leyendo la base de datos …
108112 ficheros y directorios instalados actualmente.)
Desempaquetando apache2-mpm-prefork (de …/apache2-mpm-prefork_2.2.9-7ubuntu3_i386.deb) …
Seleccionando el paquete php5-common previamente no seleccionado.
Desempaquetando php5-common (de …/php5-common_5.2.6-2ubuntu4.1_i386.deb) …
Seleccionando el paquete libapache2-mod-php5 previamente no seleccionado.
Desempaquetando libapache2-mod-php5 (de …/libapache2-mod-php5_5.2.6-2ubuntu4.1_i386.deb) …
Seleccionando el paquete php5 previamente no seleccionado.
Desempaquetando php5 (de …/php5_5.2.6-2ubuntu4.1_all.deb) …
Configurando apache2-mpm-prefork (2.2.9-7ubuntu3) …
* Starting web server apache2 apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName
[ OK ]Configurando php5-common (5.2.6-2ubuntu4.1) …
Configurando libapache2-mod-php5 (5.2.6-2ubuntu4.1) …Creating config file /etc/php5/apache2/php.ini with new version
* Reloading web server config apache2 apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName
[ OK ]Configurando php5 (5.2.6-2ubuntu4.1) …
Leyendo lista de paquetes… Hecho
Creando árbol de dependencias
Leyendo la información de estado… Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes… Hecho
Escribiendo información de estado extendido… Hecho
Entonces…como saber que el servidor nos está interpretando bien el código PHP..
Lo que haremos será una prueba para ver que sale.
Todas las páginas WEBS por defecto en Apache se haen de colocar en el directorio /var/www.
Asi que vamos a hacer la prueba.
pruebas@pruebas:~$ sudo nano /var/www/index.php
Con esto editaremos el archivo PHP en la carpeta donde apache guarda todas las páginas WEBS.
Para hacer la prueba PHP el fichero ha de contener eso:
pruebas@pruebas:~$ cat /var/www/index.php
<?php
phpinfo();
?>
Con un cat, pinto el archivo por pantalla, ha de contener a partir de <?php.
Entonces, cada vez que hacemos un cambio, reiniciamos el apache.
pruebas@pruebas:~$ sudo /etc/init.d/apache2 restart
* Restarting web server apache2 apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName
… waiting apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName
Muy bien, nos vamos a cualquier navegador, y ponemos localhost/index.php
Y nos ha de salir una cosa como esta:

Muy bien, ahora vamos a configurar a nuestro gusto el Apache
Todas las configuraciones se hacen sobre el fichero httpd.conf.
Vamos a empezar a editar el archivo:
pruebas@pruebas:~$ sudo nano /etc/apache2/httpd.conf
Dentro de este fichero hemos de colocar las dos siguientes lineas.
ServerName localhost
Include /etc/apache2/mods-available
Estas dos lineas sirven para lo siguiente:
La de serverName es que, cada vez que le haciamos un Restart al Apache nos salía el mensaje de error de:
.. waiting apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName
Asi que con esto, lo que hacemos es que le decimos al apache que nosotros mismo seremos el servidor DNS.
Luego la siguiente linea, lo que hace es cargar todos los módulos del apache cada vez que se inicia. Veamos como queda ahora que hacemos un restart.
pruebas@pruebas:~$ sudo /etc/init.d/apache2 restart
* Restarting web server apache2 [Fri Feb 20 13:47:59 2009] [warn] module alias_module is already loaded, skipping
[Fri Feb 20 13:47:59 2009] [warn] module auth_basic_module is already loaded, skipping
[Fri Feb 20 13:47:59 2009] [warn] module authn_file_module is already loaded, skipping
[Fri Feb 20 13:47:59 2009] [warn] module authz_default_module is already loaded, skipping
[Fri Feb 20 13:47:59 2009] [warn] module authz_groupfile_module is already loaded, skipping
[Fri Feb 20 13:47:59 2009] [warn] module authz_host_module is already loaded, skipping
[Fri Feb 20 13:47:59 2009] [warn] module authz_user_module is already loaded, skipping
[Fri Feb 20 13:47:59 2009] [warn] module autoindex_module is already loaded, skipping
[Fri Feb 20 13:47:59 2009] [warn] module cgi_module is already loaded, skipping
[Fri Feb 20 13:47:59 2009] [warn] module deflate_module is already loaded, skipping
[Fri Feb 20 13:47:59 2009] [warn] module dir_module is already loaded, skipping
[Fri Feb 20 13:47:59 2009] [warn] module env_module is already loaded, skipping
[Fri Feb 20 13:47:59 2009] [warn] module mime_module is already loaded, skipping
[Fri Feb 20 13:47:59 2009] [warn] module negotiation_module is already loaded, skipping
[Fri Feb 20 13:47:59 2009] [warn] module php5_module is already loaded, skipping
[Fri Feb 20 13:47:59 2009] [warn] module setenvif_module is already loaded, skipping
[Fri Feb 20 13:48:00 2009] [warn] module status_module is already loaded, skipping
[Fri Feb 20 13:48:00 2009] [warn] The Alias directive in /etc/apache2/mods-available/alias.conf at line 15 will probably never match because it overlaps an earlier Alias.
[Fri Feb 20 13:48:00 2009] [warn] module alias_module is already loaded, skipping
[Fri Feb 20 13:48:00 2009] [warn] module auth_basic_module is already loaded, skipping
[Fri Feb 20 13:48:00 2009] [warn] module authn_file_module is already loaded, skipping
[Fri Feb 20 13:48:00 2009] [warn] module authz_default_module is already loaded, skipping
[Fri Feb 20 13:48:00 2009] [warn] module authz_groupfile_module is already loaded, skipping
[Fri Feb 20 13:48:00 2009] [warn] module authz_host_module is already loaded, skipping
[Fri Feb 20 13:48:00 2009] [warn] module authz_user_module is already loaded, skipping
[Fri Feb 20 13:48:00 2009] [warn] module autoindex_module is already loaded, skipping
[Fri Feb 20 13:48:00 2009] [warn] module cgi_module is already loaded, skipping
[Fri Feb 20 13:48:00 2009] [warn] module deflate_module is already loaded, skipping
[Fri Feb 20 13:48:00 2009] [warn] module dir_module is already loaded, skipping
[Fri Feb 20 13:48:00 2009] [warn] module env_module is already loaded, skipping
[Fri Feb 20 13:48:00 2009] [warn] module mime_module is already loaded, skipping
[Fri Feb 20 13:48:00 2009] [warn] module negotiation_module is already loaded, skipping
[Fri Feb 20 13:48:00 2009] [warn] module php5_module is already loaded, skipping
[Fri Feb 20 13:48:00 2009] [warn] module setenvif_module is already loaded, skipping
[Fri Feb 20 13:48:00 2009] [warn] module status_module is already loaded, skipping
[Fri Feb 20 13:48:00 2009] [warn] The Alias directive in /etc/apache2/mods-available/alias.conf at line 15 will probably never match because it overlaps an earlier Alias.
Vale, muchas letras lo se, pero es le mensajito de cuando está cargando los módulos.
Vamos otra vez a editar el archivo httpd.conf igual que antes y le vamos a añadir las siguientes lineas.
DirectoryIndex start.html
ErrorDocument 404 /error.html
<Directory /var/www/pruebas>
DirectoryIndex startpruebas.html
</Directory>
<Directory /var/www/pruebas2>
DirectoryIndex startpruebas2.html
</Directory>
Queda bastante feo poner localhost y que nos muestre una lista de los archivos de nuestro servidor,esto no pasaría si hubiese un fichero index.html o index.php, pero y si le quiero poner yo el nombre que a mi me de la gana.
Para ello está la directiva DirectoryIndex, esta directiva nos permite establecer como se llamará la página de inicio de nuestro servidor.
La siguiente linea, vosotros habeis visto, cuando navegais por Internet que si os equivocais en escribir la dirección nos sale un mensaje de error no?
Pues también podemos personalizar ese mensaje o esa página en si, a la mia la he puesto en la raíz del servidor y le llamado error html.
Si queremos tener nuestros Site web organizado por carpetas se lo tendremos que especificar al apache.
E incluso podemos especificar dentro de esa directiva OTRA directiva para poder especifixar cual será la página de inicio. Asi que preparemos el entorno:
root@pruebas:/var/www# nano start.html
Dentro colocaremos:
<html>
<head>
<title>Pagina de Pruebas</title>
</head>
<body>
Esta es una pagina de pruebas
</body>
</html>
Sigamos con el siguiente fichero el del error:
root@pruebas:/var/www# nano error.html
Dentro colocamos:
<html>
<head>
<title>Pagina de Errores</title>
</head>
<body>
ERROR LA PAGINA QUE BUSCAS NO ESTA
</body>
</html>
Ahora veremos en el Apache se pueden poner las webs por carpetas, se lo especicamos tal y como hemos echo alli arriba. Sigamos creando el entorno:
root@pruebas:/var/www# nano error.html
root@pruebas:/var/www# mkdir pruebas
root@pruebas:/var/www# cd pruebas/
root@pruebas:/var/www/pruebas# nano startpruebas.html
Dentro del fichero startpruebas.html, colocamos esto:
<html>
<head>
<title>Pagina de de pruebas</title>
</head>
<body>
Hemos creado una pagina dentro de una carpeta
</body>
</html>
Sigamos con la siguiente preparación:
root@pruebas:/var/www/pruebas# cd ..
root@pruebas:/var/www# mkdir pruebas2
root@pruebas:/var/www# nano startpruebas2.html
Ahora hagamos las comprobaciones.
Primero reiniciamos el apache.
Vámonos al navegador y pongamos localhost/
Nos tendría que salir directamente la página que le hemos dicho que era la principal en el fichero httpd.conf la de start.html

Como podemos ver nos sale la página de start, ahora metamos algo que no exista..a ver si sale la página de error.

También me sale la página de error, ahora vamos a ver si podemos ver la página dentro de una carpeta.

Y hasta aquí acaba la primera parte de APACHE