Archive

Archive for the ‘Web Servers’ Category

Configurar nuestra computadora como servidor web con ubuntu

April 21st, 2011 5 comments
entorno lamp

entorno lamp

Normalmente el enfoque de la web and beer esta orientado a personas que ya tienen un cierto nivel y pueden hacer estas cosas con los ojos cerrados y varios whisky’s encima, pero estamos haciendo un esfuerzo por captar nuevos miembros, aunque estos tengan un nivel muy basico.

La idea es clara, que todos podamos aprender.

En esta ocacion vamos a configurar nuestra computadora con Ubuntu para que pueda ser un servidor web y gestionar los distintos proyectos que podamos tener.

Esto va a ser una explicacion muy orientada a la practica, esto quiere decir que no profundizaremos mucho en ciertos temas y cuestiones, para ellos por favor buscar en otras fuentes, o quizas en alguno de nuestros post (seguro algo de informacion existe).

Para poder seguir este tutorial, por favor contar con una computadora con Ubuntu instalado.

Primero que nada, vamos a instalar Apache, PHP y MySQL. Esa combinacion de software es la mas tipica, y es conocida como entorno LAMP (Linux, Apache, MySQL y PHP).

Primero instalamos Apache:

sudo apt-get install apache2.2-common

El que no sepa que hace apt-get por favor ni se moleste en seguir con este tutorial!. Bueno bueno, es el manejar de paquetes, los paquetes son “cosas” como programas, librerias, etc. Ejecutando ese comando instalara apache 2.2 mas todas las dependencias (cosas que necesita para poder funcionar).

Una vez instalado apache instalamos PHP.

sudo apt-get install php5 php5-cli php5-common php5-curl php5-gd libapache2-mod-php5filter

Con eso deberia ser suficiente para nosotros, ojo, no intalamos aun el soporte a mysql, hay razones para esto que aprenderan con el tiempo y la experiencia ganada.

Ahora vamos a instalar MySQL.

sudo apt-get install mysql-server-5.1 mysql-client-5.1

Eso nos instalara el server y client (el programa para poder acceder a mysql).

Muy bien, ya tenemos todo entonces verdad? apache, mysql y php, pero ahora vamos por el detalle, la lib de acceso a mysql para php.

sudo apt-get install php5-mysql

Con eso ya tenemos todo listo para comenzar.

Ahora bien, primero vamos a aprender a iniciar, parar y reiniciar nuestro apache (es un proceso en memoria, se lo conocemo como daemon, hay muchos daemon en nuestro ubuntu).

Los daemons o programas que estan “a la escucha” en Ubuntu son manejados por un comento que casi siempre estan en:

/etc/init.d/<algo a manejar>

Por ejemplo, para iniciar apache escribimos

/etc/init.d/apache2 start

Para detener apache

/etc/init.d/apache2 stop

Para reiniciar (por ejemplo porque cambiamos algo de la configuracion de apache o PHP).

/etc/init.d/apache2 restart

Ahora bien, vamos a ver si todo esta funcionando correctamente.

Abrimos nuestro navegador (espero que sea un chrome a estas alturas por favor) y escribimos http://127.0.0.1

Deberia salir un mensaje de “It works” o algo asi, depende de lo que les pinto en ese momento a los de apache.

Que es “127.0.0.1″ ? es la direccion ip de lookup, es decir, la direccion ip de nuestro “localhost”, nuestra computadora se refencia asi misma con esa direccion ip, en todas las computadoras del universo casi siempre es asi, siempre que hagamos ping a 127.0.0.1 estamos haciendonos un ping a nosotros mismos.

 

Ok, ahora vamos a plantear un escenario comun, imaginemos que queremos trabajar en 2 proyectos diferentes, uno se llama “los simpsons” y el otro “dale gas”. Como hacemos para tener bien separados estos proyectos? Vamos a la solucion.

Primero que nada, entendamos que apache es un servidor web, cada servidor web puede gestionar varias paginas web, cada pagina web tecnicamente es conocida como “virtual host”.

Un virtual host es una declaracion en la configuracion de apache donde basicamente le decimos que si alguien escribe en su navegador “lossimpsons.com” debe leer los archivos del directorio que le indiquemos, como asi tambien si escriben “dalegas.com”.

Los virtuals hots en apache dentro de ubuntu se encuentran en el directorio

/etc/apache2/sites-enabled/

Asi que vamos a crear un virtual host.

sudo gedit /etc/apache2/sites-enabled/lossimpsons

Se nos abre un editor de texto, asi que vamos a escribir este contenido en su interior

<VirtualHost *:80>
ServerName lossimpsons.com
DocumentRoot /var/www/lossimpsons.com/public_html
</VirtualHost>

Guardamos el archivo y cerramos el editor.

Ahora tenemos que reiniciar apache (ya dije como se hace).

Pero claro, lossimpsons.com no estan resolviendo a la direccion de internet que tengamos en ese momento, entonces como podemos hacer para probarlos?

En los sistemas operativos existe un archivo conocido como “archivo hosts” donde se pueden redefinir ciertas reglas a la hora de resolver un dominio a una direccion ip, y con estas reglas podemos forzar que un dominio tenga la direccion ip que nosotros querramos (obviamente esto solo afectara a nuestra computadora).

Para editar nuestro archivo hosts ejecutamos:

sudo gedit /etc/hosts

En mi caso, el archivo hosts de mi computadora se ve asi:

 

192.168.0.109	lortmorris-laptop	# Added by NetworkManager
127.0.0.1	localhost.localdomain	localhost
::1	        lortmorris-laptop	localhost6.localdomain6	localhost6
127.0.1.1	lortmorris-laptop
127.0.0.1       lossimpsons.com

Como veran, en la ultima linea agregue que la ip 127.0.0.1 es para el dominio “lossimpsons.com”.

Esto hara que cuando hagamos ping a lossimpsons.com la direccion ip devuelta sea “127.0.0.1″.

Ponemos en nuestro navegador entonces “lossimpsons.com” y vemos que pasa.

Si nos da error, es simplemente poque no hemos creado el document root de ese virtual host, el document root es el directorio en el cual estara nuestro sitio web (virtual host), por lo que vamos a crearlo.

mkdir /var/www/lossimpsons.com
mkdir /var/www/lossimpsons.com/public_html

Ahora vamos a meter un archivo ahi adentro para saber que todo funciona bien

echo "<?php phpinfo(); ?>"  > /var/www/lossimpsons.com/public_html/index.php

Ahora volvemos a nuestro navegador y vemos que pasa.

Si todo sale bien deberian ver una pagina web con informacion muy “rara” sobre php, apache, etc. Eso quiere decir que todo quedo bien.

Les comento para los que no se dieron cuenta, que en el comando anterior (echo …) generamos un archivo.php donde en su interior hay una funcion llamada php_info.

Lo que deberia ver es algo como esto

 

Bueno, de la misma forma que generamos el primer virtual hosts, podemos generar todos los que queramos.

Cualquier duda o comentario dejarlo en este blog :)

 

Configurar el puerto de lighttpd en Debian

April 2nd, 2011 No comments
light httpd en debian

light httpd en debian

Hace unas horas instale un lighttpd en Debian. Obviamente se instalo la ultima version, y aqui paso algo raro.

Tengo Apache en el port 80, y siempre que instalo lighttpd lo tengo que pasar al port 8080, pero la tipica configuracion

server.port = 8080

no estaba funcionando.

Note que ahora la estructura de directorios de lighttpd en /etc era similar a la logica aplicada en apache, pero no importaba si configuraba el port al 8080, lighttpd seguia diciendo

can't bind to port: :: 80 Address already in use

Buscando por internet encontra la solucion, por lo que quiero compartirla con ustedes por su alguna vez les pasa lo mismo que ami.

Agregar estas lineas en el lighttpd.conf

server.port               = 8080
server.socket = "[::]:8080"

Y comentamos la linea

#include_shell "/usr/share/lighttpd/use-ipv6.pl"

Le damos iniciar al servicio y listo, problema resuelto :)

 

Bloquear a google bot de todos los virtualhosts

March 11th, 2011 No comments

Esto es algo muy comun, es decir, una necesidad comun entre los programadores.

Todos los programadores usan un server de desarrollo, y obviamente no estan interesados en que Google pase a indexar las paginas de desarrollo.

Es por eso, que aca va una forma muy simple de resolver el problema.

Para bloquear a Googlebot de todos los virtualhosts simplemente podemos crear una regla para un directorio parent a todos los virtualhosts.

Supongamos que nuestro escenario es: /home/virtuals/site1 , /home/virtuals/site2, N

RewriteEngine On
RewriteRule  .*robots\.txt$         /home/varios/robotsforall.txt [L]

En el robotsforall.txt simplemente ponemos

User-agent: *
Disallow: /
Categories: apache, SEO, sysadmin Tags:

mod_rewrite para cambiar imagenes segun pais de origen

May 12th, 2010 No comments

Nuestro amigo Demian Rodriguez despues de una corta discucion en la lista, nos trae una configuracion para mod_rewrite que permite servir imagenes segun el pais de origen del visitante.

Espero que les sea util a todos.

# rewrite images by language
	RewriteCond %{HTTP_COOKIE} locale=nl_NL [NC]
	RewriteCond %{REQUEST_FILENAME} /images/(.*?)$
	RewriteCond %{REQUEST_FILENAME} !/images/nl/.*?$
	RewriteCond %{DOCUMENT_ROOT}/images/nl/%1 -f
	RewriteRule ^.*$ images/nl/%1 [NC,L]

Configuración de ISP

July 15th, 2008 1 comment

Leyendo Linuxeando, me entero en este post que How To Forge sacó una serie de guías para la configuración de un ISP (un servidor completo que ofrezca todos los servicios necesarios para un ISP y alojamiento web: servidor web Apache (con SSL), servidor de correo Postfix con SMTP-AUTH y TLS, servidor DNS con BIND, servidor FTP con Proftpd, servidor MySQL, Dovecot POP3/IMAP, Quota, Firewall, etc.).

Sacaron versiones para distintas distribuciones. Yo estoy esperando la de Slackware.

También hace un tiempo salió un documento de Implementación de servidores con GNU/Linux por Joel Barrios Dueñas.

Con respecto a otros sistemas operativos Unix, también está disponible esta guía para instalar un ISP en FreeBSD, pero por lo que estuve hablando con Cesar a esta guía le faltarían algunas cositas. Estaría bueno que Cesar publique su versión más completa y en castellano.

De más está decir que no pongo las manos en el fuego por NINGUNA de las guías nombradas, sino que esto es meramente para compartir información.

Arquitectura y escalabilidad de YouTube

July 14th, 2008 No comments

Dando vueltas por esto de la internet y la blogosfera en la mañana de ayer, encontré un par de videos bastante interesantes a cargo de Cuong Do, uno de los ingenieros que estuvo en el desarrollo de youtube desde el comienzo y ahora es manager del grupo de ingeniería del core del producto.

La verdad hasta el momento solamente vi entero el primer video, en el cual Do habla sobre la arquitectura de youtube y cuenta algunos problemas que tuvieron. Entre ellos destaca uno con la forma de almacenar los thumbnails directamente en disco en una estructura “plana” de directorios y que les generó en determinado momento un conflicto en el file system que no entendí exactamente cuál fue, pero lo terminaron resolviendo con una estructura jerárquica de directorios. Luego también habla de otro problema con MySQL y unas placas que tenían que generaban unos problemas de voltage y les daban unos quilombos con un checksum (muy loco).

En cuanto a la arquitectura habla de que tienen una serie de servidores de balanceo que envian los requests a los web servers, e internamente como ya sabemos los recibe Apache para el contenido dinámico y el contenido estático se sirve con lighthttpd. Y luego tienen los servidores de memcache y los de bases de datos. También habla de unos servidores que creo que son de Google que los usan para tener como “más a mano” los videos más vistos.

En cuanto a tecnologías repite un poco lo que ya se sabe: Servidores Linux (SuSE), Apache y Lighthttpd, MySQL 5.0.X, el 99% del código en Python y usan toda la serie de recursos de Google a las que accedieron luego de la compra (el motor de búsqueda, el file system, y todas esas cosas locas para procesamiento distribuido que tiene Google).

Este es el video:

Fuente: Gigaom.

Luego, viendo los comentarios del post vi que uno indicaba que en esta otra conferencia Do habría hablado de lo mismo, así que la dejo también porque es más larga (52 minutos).

Link a Google Video

Lighthttpd y los proxy

May 16th, 2008 1 comment

El otro día me había puesto a hacer algunos experimentos con el tema de Proxy en Apache, y me di cuenta que la verdad era medio complicado conseguir cosas interesantes.

Como soy compañero de uno de los difusores mas importantes de lighthttpd en Argentina (Martin Sarsale), me puse a investigar este tema de Proxy en lighthttpd.

La verdad, es que es increíble los simple y rápido de implementar, y las posbilidades que tiene.

Primero que nada, vamos a explicar un poco lo que yo puntualmente tenia que resolver, y como lo hice.

Tengo un Server que tiene millones de fotos y videos en formato flv, y muchos js y css, mas el apache con PHP.

Por otro lado, tengo un servidor con MySQL.

El problema radica en que cada vez que se solicitaba una imagen (el sitio muestra galerías de imágenes) se instanciaban muchos procesos de apache que ocupaban sus buenos MB en RAM. Esto generaba que cuando había 100 usuarios concurrentes, todo se caiga pero mal.

Bien, la solución que se me ocurrió fue poner un servidor mas con todo el contenido estático. Implemente el lighthttpd, y la verdad es que el contenido se servia de maravilla, era muy rápido, y re livianito.

El tema estaba ahora en que, no podía ir a cambiar todas las referencias de imágenes, js, css y videos a una nueva URL (onda static.server.com que apuntaría al nuevo Server) por que había mucho hardcode.

La solución que encontré fue simple, en el servidor con Apache y PHP, instale un lighthttpd en el port 80, mande el Apache al 8080, y aplique estas pequeñas líneas de config:

proxy.server = ( “.php” =>

( (

“host” => “127.0.0.1″,

“port” => 8080

) ),

“.css” =>

( (

“host” => “192.168.1.50″,

“port” => 80

) ),

“.gif” =>

( (

“host” => “192.168.1.50″,

“port” => 80

) ),

“.jpg” =>

( (

“host” => “192.168.1.50″,

“port” => 80

) ),

“.flv” =>

( (

“host” => “192.168.1.50″,

“port” => 80

) ),

“.js” =>

( (

“host” => “192.168.1.50″,

“port” => 80

) )

)

Creo que es bastante entendible como funciona esto.

No quiero explicar cosas de mas, ni ponerme en detalles, solo quiero presentarles una mínima idea de las cosas que se pueden hacer fácilmente con lighthttpd.

Saludos.