Mis experiencias como programador

Mi fichero de configuración de nginx (compatible con ImagineBundle)

Hace unos días salio esté artículo en el que se detalla una configuración de nginx, compatible con ImagineBundle. Precisamente hace un par de semanas que también active ImagineBundle para este y otros sitios que tengo, asi que creo que puede ser interesante tambien compartir como lo resolví yo, además de detallar, el resto de la configuración.

Eliminar www

Yo soy partidario de eliminar las www, ya que no aportan nada, y hacen el nombre de dominio, más largo, en este bloque que responde a todas las peticiones www.desarrolla2.com y blog.desarrolla2.com, con una redirección 301 a desarrolla2.com

server {
    listen   8080;
    server_name www.desarrolla2.com blog.desarrolla2.com;
    rewrite ^(.*) http://desarrolla2.com$1 permanent;
}

Configuración

En este bloque, aparecen los datos generales de la configuración, el puerto que escicha, el nombre del servidor, el document root, y el fichero index.

    listen   8080;
    server_name desarrolla2.com;
    root /var/www/desarrolla2.com/current/web;
    index app.php;

Redirigiendo las peticiones a Symfony2

El siguiente bloque redirige las peticiones al fichero app.php ( symfony2 ), además es importante no olvidar pasarle el parametro $query_string, ya que si no, se pierden los parametros pasados por url.

    location / {
        try_files $uri $uri/ /app.php?$query_string;
    }

Habilitando ImagineBundle

Habilito que las peticiones de /media/cache, sean redirigidas tambien a app.php

    location ~ ^/media/cache {
        try_files $uri /app.php?$query_string;
    }

Configuración de php en modo fastcgi

php-fastcgi es una configuración de ejecución de php, en modo servicio, es decir, que escucha peticiones en un determinado puerto, en lugar de estar como módulo de un servidor web.

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index app.php;
        include fastcgi_params;
        fastcgi_param  SERVER_PORT        $http_x_forwarded_port;
    }

Eliminanar cookies y añadir cabeceras http cache

Es responsabilidad de la aplicación y no del servidor web, realizar esta tarea, sin embargo en recursos (css, js, etc), será el servidor web, el encargado.

    location ~* ^.+\.(jpg|jpeg|gif|png|ico|swf|flv|woff)$ {
        access_log off;
        expires 30d;
    }
 
    location ~* ^.+\.(css|js)$ {
        access_log off;
        expires 7d;
    }

Configurar Gzip

Habilitar gzip, reduce el tiempo de transferencia, a cambio de una pequeña ganancia en la carga del servidor. En este caso, además indico para que content-type quiero que se ejecute, por ejemplo no tiene sentido, comprimir un fichero zip, o un video.

    gzip on;
    gzip_vary on;
    gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;

Ficheros de log

Me gusta especificar carpetas diferentes para los logs, y los errores, ya que me permite por ejemplo realizar un tal *.log sobre la carpeta concreta, además de tener ficheros diferentes para cada sitio web.

    access_log /var/log/nginx/access/desarrolla2.com.log;
    error_log /var/log/nginx/error/desarrolla2.com.log error;

Si quieres ver la versión completa la tienes aquí