gzip en nginx

Filed under: Uncategorized — Tags: , , , , , , , — ghostbar @ 10:48 am February 6, 2010

Siguiendo con la serie de configuraciones que realicé con nginx aquí va lo que hice en /etc/nginx/nginx.conf para tener gzip funcionando:

gzip  on;
    gzip_http_version 1.1;
    gzip_buffers 16 8k;
    gzip_comp_level 2;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    gzip_types  text/html text/css text/xml application/x-javascript application/atom+xml text/plain text/x-component;
    gzip_vary on;

Como podrán haber adivinado en gzip_types van el tipo de archivos que quieren sean comprimidos.

Esa parte se incluye en la zona de http y con eso tendrán gzip funcionando al reiniciar nginx.

spawn-fcgi y 503 Bad Gateway

Filed under: Español, Software — Tags: , , , , , , — ghostbar @ 7:34 pm February 5, 2010

Este es un error MUY común el 503 Bad Gateway al menos usando nginx + spawn-fcgi, yo terminaba encontrándomelo cada 2 o 3 días y sin razón aparente.

La forma como terminé resolviéndolo fue especificando el valor de la variable PHP_FCGI_MAX_REQUESTS en el script /usr/bin/php-fastcgi a 1000:

#!/bin/sh
PHP_FCGI_MAX_REQUESTS=1000 \
/usr/bin/spawn-fcgi blah blah blah

Luego terminé agregando más procesos a spawn-fcgi para darle más fluidez por lo que terminó quedando el script con algo como:

#!/bin/sh
PHP_FCGI_CHILDREN=3 \
PHP_FCGI_MAX_REQUESTS=1000 \
/usr/bin/spawn-fcgi blah blah blah

De Apache a nginx

Filed under: Español, Software — Tags: , , , , , , , , , , — ghostbar @ 10:15 pm February 4, 2010

Antes había usado Cherokee (antes de que tuviese interface de administración bonita) y había terminado usando Apache de nuevo por unos problemitas con la configuración, sobre todo los rewrite de WordPress y Drupal que se terminaban en una pesadilla para mi, más no es que lo sean ahorita, realmente ni sé como se maneja en Cherokee actualmente esto.

Ahora, dejándome llevar un poco por la moda y sobre todo por los 300 y algo MB de RAM que tengo en el nodo de Linode me vi en la necesidad de bajar el consumo de memoria y mi opción inmediata fue nginx. Mi primera necesidad era que corriese PHP para montar Wordpress y conseguí que es facilísimo configurar los VirtualHosts, consume el mínimo de memoria y corre rapidísimo.

La instalación facilísima, lo hice en Debian Stable, si lo hacen en >Stable no necesitarán los últimos 3 sino spawn-fcgi:

# aptitude update
#aptitude install nginx php5-cli php5-cgi build-essential wget psmisc

¿Por qué build-essential, wget y psmisc? Porque se necesita para compilar spawn-fcgi que luego usaremos para PHP.

Si has usado Apache verás que la estructura es parecidísima, se configuran en /etc/nginx/sites-available/ y se copia o hacen enlaces simbólicos hacia /etc/nginx/sites-enabled/, recomiendo usar el último método para facilidad de administración.

Así se terminó viendo uno de los archivos de configuración local para hacer las pruebas del servidor:

server {
	listen 80;
	server_name localhost;
	access_log /home/ghostbar/tmp/boo_access.log;
	error_log /home/ghostbar/tmp/boo_error.log;

	location / {
		root 	/var/www/w;
		index	index.php;

		if (-f $request_filename) {
			expires 30d;
			break;
		}

		if (!-e $request_filename) {
			rewrite ^(.+)$ /index.php?q$1 last;
		}
		include /etc/nginx/expire_headers;
	}

	location ~ \.php$ {
		include /etc/nginx/fastcgi_params;
		fastcgi_pass 127.0.0.1:56123;
		fastcgi_index index.php;
		fastcgi_param SCRIPT_FILENAME /var/www/w$fastcgi_script_name;
	}
}

La línea para rewrite funciona perfectamente para WordPress y garantiza que funcionará sin activar absolutamente nada más en WordPress.

El contenido de /etc/nginx/expire_headers es el que copiaré a continuación, sin embargo, no lo necesitan. /etc/nginx/fastcgi_params viene con la instalación de nginx al menos en Debian 5.

if ($request_uri ~*	"\.(ico|gif|png|jpe?g|css|js|swf)(\?v\d\d?\.\d\d?\.\d\d?)?$") {
	  expires max;
	    break;
}

Muy bien, ahora configurando para que PHP funcione con spawn-fcgi:

Descárguese spawn-fcgi, en este momento funciona:

$ cd /tmp
$ wget http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz
$ tar -zxf spawn-fcgi-1.6.3.tar.gz
$ cd spawn-fcgi-1.6.3/
$ ./configure
$ make
$ sudo cp src/spawn-fcgi /usr/bin/spawn-fcgi

Créese el archivo /usr/bin/php-fastcgi con la siguiente información:

#!/bin/sh
exec 2>&1
PHP_FCGI_CHILDREN=2 \
PHP_FCGI_MAX_REQUESTS=1000 \
exec /usr/bin/spawn-fcgi -a 127.0.0.1 -p 12345 -u www-data -f /usr/bin/php5-cgi

Las razones por las que le paso esas variables a spawn-fcgi es porque suele fallar sin razón sin usar PHP_FCGI_MAX_REQUESTS y PHP_FCGI_CHILDREN hace de que hayan 2 procesos y no se recargue uno de ellos, esto garantiza mayor fluidez en la ejecución de los scripts PHP.

Ahora el demonio para PHP, yo lo llamé /etc/init.d/php-fastcgi:

#!/bin/bash
PHP_SCRIPT=/usr/bin/php-fastcgi
RETVAL=0
case "$1" in
	start)
		$PHP_SCRIPT
		RETVAL=$?
	;;
	stop)
		killall -9 /usr/bin/php5-cgi
		RETVAL=$?
	;;
	restart)
		killall -9 /usr/bin/php5-cgi
		$PHP_SCRIPT
		RETVAL=$?
	;;
	*)
		echo "Usage: php-fastcgi {start|stop|restart}"
		exit 1
	;;
esac
exit $RETVAL

Le decimos al sistema que inicie el demonio cuando prendamos la máquina con:

# update-rc.d php-fastcgi defaults

Y ya, ahora a darle permisos de ejecución a /etc/init.d/php-fastcgi, /usr/bin/php-fastcgi y /usr/bin/spawn-fcgi e iniciar los demonios nginx y php-fastcgi con:

# /etc/init.d/nginx start
# /etc/init.d/php-fastcgi start

La migración de Apache a nginx como verán es casi directa, sólo adaptar los VirtualHosts a la nueva sintáxis que es sencillísima de entender.

Pasé de usar 289MB de RAM en mi nodo a 118MB con 4 procesos PHP y 6 procesos de nginx.

Ya nginx + spawn-fcgi para correr PHP5 en chaldea

Filed under: Español, Software — Tags: , , , , , , , , — ghostbar @ 10:51 pm February 2, 2010

Chaldea es mi servidor en Linode. Venía de usar apache2 + mod_php5 y consumía 288MB de RAM, ahora estoy consumiendo 94MB con 6 procesos para nginx además de que es más rápido el renderizado de las páginas webs.

Mañana si tengo chance escribiré de como hice para migrar de Apache a nginx y montar Wordpress con rewrites.

¡En Linode!

Filed under: Español — Tags: , , , , , — ghostbar @ 8:14 pm January 31, 2010

Ya, después de mucho esperar estoy en linode, quizás incluso cambie de Apache a Nginx para ahorrar en memoria y CPU. Si alguien tiene algunas recomendaciones sería genial.

Songbird FTW

Filed under: Español, Software — Tags: , , , , — ghostbar @ 3:53 pm January 17, 2010

Plugins plugins y más plugins. Esa es de las ventajas que le veo a Songbird. Tienes la base de un reproductor de música y después lo moldeas a tu gusto a partir de algo que funciona rápido y de nuevo, funciona.

Fácil, sencillo, y sin base de datos. Mi recomendación va con songbird.

¿Instalarlo?

Puedes instalarlo vía apt-get/aptitude en Debian PERO está más actualizado desde la web y se actualiza sólo con un click mientras lo tienes en algún directorio local. Si no quieres actualizarlo por tu cuenta sino que lo quieres en todo el sistema:

# aptitude install songbird

Si lo quieres como yo lo llevo:

tmp:~ wget http://download.songbirdnest.com/installer/linux/i686/Songbird_1.4.3-1438_linux-i686.tar.gz
tmp:~ tar -zxf Songbird_1.4.3-1438_linux-i686.tar.gz
tmp:~ cd Songbird
tmp:~ ./songbird

Yo coloco un enlace simbólico en ~/bin que está en mi ruta de binarios así que con hacer songbird ya tengo.

FF 3.7 no muestra algunas cosas

Filed under: Español, Software, Tecnología — Tags: , , , , , , , — ghostbar @ 12:42 am January 16, 2010

Para algunos será un sistema extraño el que tengo, Firefox 3.5, 3.6 y 3.7, Chrome, Chromium, Konqueror, Opera, Epiphany y cuanto navegador consigo, pero para cualquier diseñador web no lo será. De hecho faltaría IE6 y IE7 corriendo con wine.

En fin, ese no es el hecho sino que desde algunos nightly-build para acá (consideren que actualizo diariamente) los botones en Flickr no funcionan. Tampoco aparecen los botones que produce BigTweet en páginas que corren WordPress.

Desactivé todos los plugins pero aún así no consigo cuál es la falla. Quería saber si podríamos recopilar cuanta información se pudiese y cuanta gente pudiese probarlo. Bajarse el 3.7 es facilísimo y es sólo descomprimir y correr el binario firefox-bin. Esperaré más respuestas, quizás sea el montón de instalaciones que tengo que esté afectando en algo.

3.5 y 3.6 sí funcionan.

Remembering how is that my build system works

Filed under: English, Software — Tags: , , , — ghostbar @ 9:37 pm January 14, 2010

Today I was remembering that, thinking on writing about it.

Frankly, I love that works because sometimes I don’t understand what I did. A bunch of shell scripts, perl, cowbuilder, local apt-proxy and…

Maybe next time I feel like writing about my build system it will be trivial, not this time. Haha.

FreeSans como sustitución de Helvetica

Filed under: Español, Software — Tags: , , , , , , , , , — ghostbar @ 12:41 am January 12, 2010

fonttheworld

Es difícil decir alguna diferencia entre la letras usadas en la imágen que coloqué a la izquierda. La letra de arriba es la FreeSans, la de abajo es Helvetica LT Std.

Es difícil para muchos conseguir Helvetica y es costosa comprarla, a menos que la descargues de algún lugar la opción más sencilla es simplemente sustituirla con el uso de FreeSans que es una letra libre parte de FreeFonts de las que hablé hace un tiempo atrás.

Por supuesto, Helvetica es mucho más famosa, pero si las comparan son muy similares además de que no tendrán problemas de licencia. Lo otro que faltaría y realmente no he investigado es como hacer de que tu sistema entienda FreeSans como si fuese Helvetica. De seguro será usando algún tipo de alias pero honestamente no me ha dado tiempo de revisar eso.

En vez de NFS, usa SSHFS

Filed under: Software, Tecnología — Tags: , , , , , — ghostbar @ 10:52 pm January 4, 2010

Usa Fuse, no necesitas configurar nada en /etc/exports ni mantener demonios con puertos abiertos. ¿Tienes algo en remoto y lo quieres montar en local?

# aptitude install sshfs
# adduser tuusuario fuse

Sales de la sesión y vuelves a entrar para que surta efecto el agregado al grupo fuse y listo, puedes montar un directorio remoto en tu máquina con algo como:

$ sshfd akkad:t/ ./tmp

* akkad es un alias para una de mi máquinas, cámbiese por cualquier dirección de máquina remota.

Esto se lo recomiendo sobre todo a las personas nuevas por la sencillez de la instalación, de la configuración y la sencillez de uso. Ahora, por favor, configuren bien su servidor SSH :-).

Older Posts »