Configurando un Reverse Proxy con Apache

Un Proxy es un servicio que actúa como intermediario entre una comunicación del tipo Cliente-Servidor.

Mientras que un proxy normal (Forward Proxy) hace que un servidor no te contacte directamente, sino que es el proxy quien se conecta con el servidor, manteniendo al cliente en el anonimato, un Reverse Proxy, mantiene al servidor en el anonimato para con sus clientes…

 

Éstas imágenes lo aclaran muy bien:

Forward Proxy:

Forward Proxy

Reverse Proxy:Reverse Proxy

(Gracias Wikipedia por las imágenes)

 

Para qué podemos utilizar un Reverse Proxy?

Los usos son muchos, pero el clásico es el siguiente:

Supongamos que instalamos un servicio en nuestro servidor, este servicio responde al puerto 8080, es decir, accedemos a este servicio mediante http://www.example.com:8080.

Pero queremos acceder al servicio mediante http://servicio.example.com porque es más fácil para los usuarios.

Obviamente, no podemos configurar el puerto del servicio para que use el 80 porque tenemos un Apache o que ya está corriendo en ese puerto…

Entonces, “enmascaramos” la verdadera URL con el Reverse Proxy…

 

Como configurar un Reverse Proxy en Apache:

Primero instalamos un paquete que nos va a servir:

apt-get-install libapache2-mod-proxy-html

Luego, activamos los módulos de apache:

a2enmod proxy  a2enmod proxy_html service apache2 restart

Con eso, ya estamos listos para crear el proxy.

Es muy sencillo:

Esas lineas dentro de un Virtual Host de Apache, son suficientes para que el proxy funcione

Pero, si el servicio que esta detrás del proxy utiliza mucho Ajax/JavaScript/CSS, vamos a notar un rendimiento muy pobre, en otras palabras, si accedemos al sitio desde la URL original: http://www.example.com:8080 tendremos una respuesta normal, pero si accedemos mediante la URL enmascarada, service.example.com, podemos llegar a tener demoras de 10 a 20 segundos!! inclusive puede ocasionar Time-Outs…

Es decir, un sitio web detrás del Reverse Proxy, se va a notar muy muy lento. Mucho más lento que accediendo desde la URL original.

Esto sucede porque por defecto, el mod_proxy solo re-mapea las URLs en los headers, no en el contenido de la página, además el modulo mod_proxy_html tampoco parsea CSS o JavaScript, entonces las URLs que se encuentran dentro de esos archivos y el contenido de la página, no son re-mapeadas, provocando una serie de Lookups que demoran mucho tiempo

 

Entonces, el código final, con lo  anterior solucionado sería el siguiente:

 

Luego, hacemos un último:

service apache2 restart

Y ya estamos listos….

 

Con eso deberiamos poder acceder a http://service.example.com exactamente igual que si accediéramos por la URL original!!!

 

Saludos!!

Iniciar y apagar Máquina virtual VirtualBox autoáticamente junto con el SO. (Ubuntu)

La mejor forma de iniciar una maquina virtual de VirtualBox al iniciar el sistema operativo host, y a su vez, apagarla cuando éste se apague, es con un script de init.d

Creamos un archivo para guardar el script:

sudo nano /etc/init.d/VM

Copiamos el siguiente contenido en el archivo y guardamos con F2.

Nota: la acción de stop del script, no apaga la VM, sino que guarda el estado y la cierra.

Le damos permisos de ejecución al script:

sudo chmod +x /etc/init.d/VM

Ahora, le decimos al script que la máquina virtual sea lo último que se inicie, y lo primero en apagarse.

sudo update-rc.d VM defaults 99 01

PD: Encontré este script acá, pero le hice un par de modificaciones para mejorarlo.

Primeros pasos con jQuery

En el post anterior, “Introducción a jQuery”,  vimos que jQuery es una librería de JavaScript muy importante y relativamente sencilla de usar, sin siquiera tener conocimientos avanzados de JavaScript.

Ahora, vamos a comenzar con los primeros pasos en jQuery, con explicaciones básicas y necesarias para comenzar con esta librería.  Como en el post anterior, ya hicimos un “Hola Mundo”, ahora, partimos de ahí, suponiendo que tenemos el entorno configurado.

 Lo básico, la función “$”

La función básica de jQuery, nos permite seleccionar elementos del DOM, para luego hacer cosas con ellos. Reemplaza el document.getElementById() de JavaScript, solo que con muchas mejoras…
por ejemplo:

La lista con todos los selectores está aqui: http://api.jquery.com/category/selectors/ si tienen tiempo de leerla, la recomiendo, no es muy larga, pero si muy potente y fácil de entender, ademas, cada caso tiene un ejemplo.

Empezando a jugar…  Ejemplos prácticos

Supongamos que seleccionamos una div con $(‘#contenedor’) ahora, podemos empezar a hacerle cambios, de estilo, posición, etc…

Esos son ejemplos de algunas de las funciones simples, más usadas de jQuery. La lista de todas las funciones con ejemplos, la pueden encontrar en este sitio:  http://api.jquery.com/

En el próximo post sobre jQuery, vamos a usar los eventos y efectos visuales.

Si te sirvió, comentá.  Saludos!

Introducción a jQuery

Write less, do more.  dice el logotipo de jQuery, pero ¿Qué es? ¿Para qué se usa? y ¿Cómo se usa?…   Esas son las preguntas que voy a tratar de aclarar con esta introducción.

jQuery es una interfaz de usuario de JavaScript, una librería que provee funciones de alto y bajo nivel, ¿Qué quiere decir esto? Que internamente corre el núcleo de JavaScript, pero se utiliza mediante funciones más sencillas que las propias de JS, facilitando así  la creación de efectos gráficos complejos, con solo un par de lineas de código.

Hoy en día, jQuery, está muy de moda, no solo por su facilidad de uso, sino que también, por los efectos que se pueden crear, son muy bonitos, -o eye-candy, como dicen en inglés- y el gran potencial de programación que le da JavaScript.

jQuery tiene una buena documentación y hay muchos ejemplos de uso en la web, lo que ha producido que jQuery tenga una gran aceptación en el mercado.

Obviamente, no todo es color de rosas, JavaScript y por lo tanto también jQuery, corren en el lado del cliente, es decir, se ejecutan en el navegador del usuario. Ésto, puede traer como consecuencia, una sobre-utilización de los recursos del PC del usuario si se abusa del uso de jQuery en una web, -en pocas palabras, podes hacer que la PC del usuario se ponga muuy lenta-

¿Qué podemos hacer con jQuery?

La respuesta es mucho. jQuery nos permite manejar el DOM (Document Object Model) a nuestro gusto, de una manera muy sencilla. Además podemos utilizar eventos, efectos, AJAX, animaciones…  y más.

A todo esto, hay que sumarle que jQuery es multi-browser, es decir, que funciona en todos los navegadores importantes.

¿Cómo utilizamos jQuery?

Como introducción a la librería, veremos lo necesario para hacerla andar…  más adelante voy a ir posteando los diferentes usos con ejemplos, para en el futuro, poder hacer un mini-manual sencillo de jQuery.

Lo principal, es descargar la librería, de su sitio oficial: http://jquery.com/ por ejemplo, al momento de escribir este artículo, la última version es la jquery-1.8.2.min.js

Lo segundo, es llamar la librería desde nuestra web, con el siguiente código:

Si todo salió bien, ya podemos usar jQuery en nuestra página. Vamos a hacer un pequeño “Hola Mundo” en jQuery:

Con solo copiar y pegar ese pequeño código, en cualquier parte del body de nuestra página, obtendremos el mensaje “Hola Mundo” con jQuery.

Si te sirvió, comenta!

Saludos!

Como interpretar un Encoder Rotativo con PIC

Rotary Encoder

Rotary Encoder

Este pequeño fragmento de código, nos permitirá interpretar la salida de los famosos -mal llamados- “Potenciometros digitales”

Hoy en día estos encoders rotativos se convirtieron en un componente muy común en los dispositivos electrónicos. Están presentes en la mayoría de los Auto-Stereos, amplificadores de potencia, fuentes de alimentación, etc, permitiendo ajustar el volumen y otros parámetros.

Vienen de distintas formas y colores, desde perillas o pequeñas rueditas, hasta sensores de alta precisión de uso industrial.

Básicamente, hay de dos tipos: Ópticos y Mecánicos. Los primeros son obviamente más caros, pero ofrecen una mayor precisión, y los segundos son los que seguramente todos hemos tocado en algún momento, esos que al girarlos se siente como se mueve el eje por los “dientes”.

Lo que hacen es, transformar un movimiento, ya sea lineal, o giratorio como el de la foto, en señales electrónicas, codificadas digitalmente. Mediante un pequeño post-procesamiento de las señales adquiridas, podemos determinar, el sentido del giro, la distancia recorrida y la velocidad.

Esta es  la señal de salida de un encoder rotativo:

(Gracias Wikipedia por la imagen!)

En los encoders como el de la foto de arriba, las señales A y B provienen de los pines externos, y el central va a VCC o a GND, según como lo quieras utilizar.

Bueno, sin más palabras, aquí está el código:

Explicación:

Como podemos observar, el chequeo del encoder se hace en el bucle principal, entonces, pregunto siempre por un pin, en este caso, el “ENCODER_A”, luego espero un tiempo que depende del tipo de encoder y la velocidad a la que se lo gira, y por ultimo pregunto cual pin está en alto. Si es el A eso nos dice que la fase empezó con el pin A, sino, con el B.

Este método, no es el mejor -lo sé- pero funciona y solo son pocas lineas de código. El problema principal es que el ancho de los pulsos de la salida depende de la velocidad con la que se gira el encoder, entonces esos 3 milisegundos de espera, nos da un cierto margen de velocidad que no debemos superar, ya que si lo hacemos podemos interpretar una dirección erronea.

De todas formas, a mi me sirvió, ya que ese “margen” es lo bastante grande como para casi no notarlo, al menos que se gire el encoder violentamente, en cuyo caso, el codigo sale sin hacer nada.

Si te sirvió comentá!!!

Como montar un Servidor Ubuntu Server COMPLETO, con ISPConfig 3 Parte 1

Este post está dedicado a instalar un servidor para hosting multi-cuentas, en una VPS, por ello, no explicare temas relacionados al hardware ni a la instalación del sistema operativo.

Si quieres saber mas sobre las VPS, y cómo elegir una VPS, mira este link.

Este post, está basado en las guías Perfect Server de HowToForge, pero con algunas mejoras.

Ubuntu Server

Para mi, Ubuntu Server, es uno de las mejores distros para iniciarse en el tema de servidores linux, debido a la gran cantidad de información y tutoriales que hay sobre el en la red.

Bueno, en este tutorial usaremos lo siguiente:

  • Ubuntu Server 11.04 como sistema operativo.
  • ISPConfig 3 como panel de administración para cuentas de Hosting.
  • Apache, PHP, MySQL
  • SquirreMail, PostFix
  • PureFTP
  • BIND 9

Comencemos…

Antes que nada, para este tutorial, usaremos server1.example.com como hostname, y supondremos que yas estamos logueados como root. (sino, anteponer sudo a cada comando)

Yo uso nano para editar los archivos, pero pueden usar vi, o cualquier otro.

Para instalar nano, hacemos:
apt-get install nano
Para utilizar nano, se abren los archivos con nano archivo luego, para guardar, se presiona F2, luego decimos que si, (Y) y luego aceptamos con ENTER.

Ahora, cambiamos el hostname:

echo server1.example.com > /etc/hostname
hostname server1.example.com
/etc/init.d/hostname restart

Click Aqui para ver la Parte 2 | Click Aqui para ver la Parte 3

Como montar un Servidor Ubuntu Server COMPLETO, con ISPConfig 3 Parte 2

Parte 2

Procederemos a editar la lista de repositorios, para poder tener los paquetes mas actualizados…
nano /etc/apt/sources.list
Borramos todo el contenido, y copiamos allí el contenido de este archivo.

Ahora, para actualizar nuestra BD de paquetes, y de paso, actualizar algunas versiones de los mismos, hacemos:
apt-get update
apt-get upgrade
Responder que si (Y) a cualquier pregunta.

Configuramos la hora del sistema:
dpkg-reconfigure tzdata
Seguir las instrucciones en pantalla.

Ahora, empezamos a instalar algunos paquetes:
apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl getmail4 rkhunter binutils maildrop

El sistema nos va a hacer las siguientes preguntas:

New password for the MySQL “root” user: tucontraseñasql
Repeat password for the MySQL “root” user: tucontraseñasql
General type of mail configuration: Internet Site
System mail name: server1.example.com
Create directories for web-based administration? No
SSL certificate required Ok

Preparamos y optimizamos MySQL para una VPS con pocos recursos de RAM:
nano /etc/mysql/my.cnf 
Comentar la linea bind-address=127.0.0.1, tiene que quedar asi: #bind-address = 127.0.0.1 (esto es para poder acceder al servidor MySQL desde otros servers/hosts.)
y cambiar los valores  de algunas de las variables, por los de aqui abajo:

[mysqld] key_buffer = 16K
max_allowed_packet = 1M
table_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 64K

También, si no vamos a usar innodb ni Berkeley DB, o ni sabes lo que es eso, agrega estas dos lineas al final del my.conf:
skip-bdb
skip-innodb

Y ahora, reiniciamos el servicio MySQL:
/etc/init.d/mysql restart

Ahora, prepararemos las claves SSL para el servicio de Mail.
cd /etc/courier
rm -f /etc/courier/imapd.pem
rm -f /etc/courier/pop3d.pem

nano /etc/courier/imapd.cnf
Cambiar CN=server1.example.com por tu hostname real

nano /etc/courier/pop3d.cnf
Cambiar CN=server1.example.com por tu hostname real

Ahora, generamos los certificados
mkimapdcert
mkpop3dcert

Y luego reiniciamos los servicios:
/etc/init.d/courier-imap-ssl restart
/etc/init.d/courier-pop-ssl restart

Ahora, instalamos apache, php y algunos modulos y paquetes extras que neesitaremos como phpMyAdmin, suExec, Pear y mcrypt:
apt-get install apache2 apache2.2-common apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-php5 php5 php5-common php5-gd php5-mysql php5-imap phpmyadmin php5-cli php5-cgi libapache2-mod-fcgid apache2-suexec php-pear php-auth php5-mcrypt mcrypt php5-imagick imagemagick libapache2-mod-suphp libruby libapache2-mod-ruby sudo zip

El sistema nos va a hacer las siguientes preguntas:

Web server to reconfigure automatically: apache2
Configure database for phpmyadmin with dbconfig-common? No

Ahora, ejecutamos los siguientes comandos para habilitar los modulos de apache:
a2enmod suexec rewrite ssl actions include
a2enmod dav_fs dav auth_digest
/etc/init.d/apache2 restart

Click Aqui para ver la Parte 1 Click Aqui para ver la Parte 3

Como montar un Servidor Ubuntu Server COMPLETO, con ISPConfig 3 Parte 3

Parte 3

Continuando con la parte 3 de este tutorial, Instalamos el FTP

apt-get install pure-ftpd-common pure-ftpd-mysql quota quotatool
nano /etc/default/pure-ftpd-common
Cambiar a STANDALONE_OR_INETD=standalone
Cambiar a VIRTUALCHROOT=true

Ahora, habilitamos TLS, y generamos su certificado SSL:

echo 1 > /etc/pure-ftpd/conf/TLS
mkdir -p /etc/ssl/private/
openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

chmod 600 /etc/ssl/private/pure-ftpd.pem
/etc/init.d/pure-ftpd-mysql restart

Continuamos instalando BIND, y las web stats:

apt-get install bind9 dnsutils
apt-get install vlogger webalizer awstats

Editamos el archivo cron.d,  y eliminamos awstats, ya que luego, ISPConfig 3, insertará sus propias lineas en el cron.d
nano  /etc/cron.d/awstats

(hay que comentar las unicas 2 lineas del archivo, y tiene que quedar asi:)

Ahora, instalamos Jailkit, que sirve para que cada usuario SSH, no se pueda salir de su directorio /home propio.
apt-get install build-essential autoconf automake1.9 libtool flex bison debhelper

cd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.14.tar.gz
tar xvfz jailkit-2.14.tar.gz

cd jailkit-2.14
./debian/rules binary
cd ..
dpkg -i jailkit_2.14-1_*.deb
rm -rf jailkit-2.14*

Instalamos y configuramos SquirreMail, para poder acceder a nuestros webmails:

apt-get install squirrelmail
ln -s /usr/share/squirrelmail/ /var/www/webmail
squirrelmail-configure 

Aqui, sigue las instrucciones de este archivo, para contestar las preguntas del sistema y configurar el squirreMail.

Una vez configurado el cliente para el webmail, antes de probarlo, configuraremos un par de cosas para hacer que el email funcione sin amavis y clamd, que son sumamente pesados para VPS con bajos recursos.
nano /etc/postfix/main.cf
Comentamos las siguientes lineas:

content_filter = amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings

Tienen que quedar asi:

#content_filter = amavis:[127.0.0.1]:10024
#receive_override_options = no_address_mappings

nano /etc/postfix/master.cf

Comentamos todas las lineas debajo de  amavis unix – – – – 2 smtp

Tiene que quedar asi:
#amavis unix – – – – 2 smtp
# -o smtp_data_done_timeout=1200
# -o smtp_send_xforward_command=yes

#127.0.0.1:10025 inet n – – – – smtpd
# -o content_filter=
# -o local_recipient_maps=
# -o relay_recipient_maps=
# -o smtpd_restriction_classes=
# -o smtpd_client_restrictions=
# -o smtpd_helo_restrictions=
# -o smtpd_sender_restrictions=
# -o smtpd_recipient_restrictions=permit_mynetworks,rej ect
# -o mynetworks=127.0.0.0/8
# -o strict_rfc821_envelopes=yes
# -o receive_override_options=no_unknown_recipient_chec ks,no_header_body_checks
# -o smtpd_bind_address=127.0.0.1

Y por ultimo reiniciamos postfix:
/etc/init.d/postfix restart

Bueno, hemos llegado al ultimo paso, instalar ISPConfig 3. Si todo ha salido bien, con ejecutar estas ultimas 5 lineas, nuestro servidor estará perfectamente configurado, y listo para alojar paginas web!

cd /tmp
wget http://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz
tar xfz ISPConfig-3-stable.tar.gz
cd ispconfig3_install/install/
php -q install.php 
 

Ahora, se ejecutara el instalador de ISPConfig3, hay que presionar enter para dejar los valores por defecto, menos cuando nos pida la clave para MySQL, ahi hay que escribirla, y luego presionar enter…

Y eso es todo! 

Ya podemos acceder a nuestro hosting desde el navegador,  mediante la IP de nuestro server, y al puerto 8080, http://xxx.xxx.xxx.xxx:8080 ahi, hay que loguearse con admin:admin

Bueno gente, espero que les haya servido este tutorial…

Acepto comentarios y criticas!

Saludos

Click Aqui para ver la Parte 1Click Aqui para ver la Parte 2

¿Qué es una VPS?

VPS, o Virtual Private Server, en español significa, Servidor Privado Virtual.

Que es una VPS

¿Qué es una VPS?

Una VPS, es un servidor virtual, que corre en un servidor físico que a su vez también alberga otras VPS. Cada VPS esta completamente aislada de las demás, tanto como de espacio en disco, como en uso del CPU. El manejo de la RAM en una VPS puede ser un poco mas complejo…  lo explico mas adelante en este post.

Una VPS es un paso intermedio, entre un hosting comun, y un servidor dedicado, hay mucha variedad de VPS, la mayor ventaja es que son completamente upgradeables es decir, que en la medida que el servidor fisico lo soporte, podemos aumentar la RAM, la velocidad del CPU, o la velocidad del puerto ethernet, con un par de clicks, instantaneamente.

Otra ventaja con respecto a un hosting compartido comun, es que en el 99% de los casos, NO dependemos de otros usuarios y somos completamente responsables de el uptime del server, ya que si una VPS está usando el CPU al 100%, ésto no afecta a las otras VPS.

Otra ventaja, es la cantidad de sistemas operativos que hay para elegir, también, con solo dos clicks, podemos elegir que distro de linux usaremos, e inclusive versiones de windows server.

 

Sistemas Operativos

¿Cómo elegir una VPS?

Hay dos tipos de VPS, Managed, y Unmanaged, cada una tiene sus ventajas, que explicare ahora, pero  un gran porcentaje de la desicion se basa en el conocimiento de linux (o windows server) que tengamos.

Ventajas de una VPS “Managed“:

  • No necesitas tener conocimientos de servidores.
  • Puedes tener tu hosting online en pocos minutos.
  • Por lo general, el soporte tecnico es mejor que en las Unmanaged.

 

Desventajas de una VPS “Managed“:
  • No tienes acceso al 100% de tu VPS.
  • Dependes del software que te instalen.
  • El precio.

 

Antes de pasar a las VPS “Unmanaged” aclaremos el tema del precio. En general, las “Managed” arrancan en 15 dolares al mes, mientras que “Unmanaged” hay desde 3 dolares al mes.

 

Ventajas de una VPS “Unmanaged“:
  • Acceso al 100% a la VPS.
  • Podemos elegir que programas instalar, y cuales no.
  • El precio.

 

Desventajas de una VPS “Unmanaged“:
  • Necesitas tener conocimientos de Linux o Windows Server.
  • Poco soporte técnico.

 

RAM

Como dije anteriormente, la decisión entre una VPS Managed y una UnManaged, pasa por tus conocimientos de linux.
Cuando ya tengas decidido que tipo de VPS deseas tener, el factor mas importante para la eleccion del plan de VPS, será la memoria RAM.

 

Aqui, tambien tenemos dos puntos a considerar:
  • RAM Dedicada
  • Burstable RAM

La primera, es la RAM que tendremos disponible físicamente garantizada SIEMPRE en nuestra VPS, y la segunda es una RAM compartida entre VPS, que no siempre tendremos disponible, y que solo se usará en casos de urgencia, por ejemplo, cuando un sitio a cierta hora del día, tiene muchas visitas.

 

Algunos de los vendedores, ofrecen burstable RAM, pero otros NO. Por eso, ésta gran ventaja que supone tener más RAM cuando se necesite, puede ser otro factor a tener en cuenta a la hora de elegir una VPS.
Espero sus comentarios, con respecto al tema. En lo personal, a mi me gustan las VPS UnManaged, y en un próximo Post, voy a explicar como montar un Servidor Web COMPLETO, desde cero.

 

Saludos!

 

Instalar paquetes en versiones viejas de Ubuntu

A veces nos encontramos con el caso de querer instalar algunas aplicaciones en versiones de ubuntu cuya vida llego a su fin.

En mi caso necesitaba instalar openssh-server en un ubuntu Gutsy.

El problema, es que al hacer apt-get update salen errores diciendo que las URL no existen. (404)

La solución es modificar el sources.list para poder descargar la lista de paquetes desde el servidor “old-releases” de ubuntu.

Paso a Paso:

sudo nano /etc/apt/sources.list

Alli, reemplaza todos los

con

Graba el archivo con F2

sudo apt-get update

y listo!!!

sudo apt-get install openssh-server