Configurar Nginx para usar una instancia de Magento y multiples websites

Hace unos días me puse a jugar con Nginx y con Magento. Una de las cosas que me complicó un poco, al principio, fue la de no tener el archivo .htaccess a disposición para armar una tienda multi-website con una única instancia.

Luego de investigar un poco, el truco está en el uso del módulo map de Nginx.

Por ejemplo, si asumimos que tenemos configurada nuestra tienda en:

/etc/nginx/sites-enables/dominio.com.ar

Vamos a editar nuestro archivo y vamos a agregar, fuera del bloque server, el bloque map, con algo como esto:

map $http_host $mage_run_code {
    dominio.com.ar argentina;
    dominio.com.uy uruguay;
    dominio.com.br brasil;
}

Lo que hacemos aquí, es mappear para cada dominio, un valor que usaremos (que han de coincidir con los códigos usados para los websites, los que asignamos al crearlos desde el backend).

Ahora, el siguiente pasto, es crear nuestra segunda configuración, con otro bloque server, donde vamos a definir los dominios.

server {
    listen      80;
    server_name dominio.com.uy;

    ...

}

Y

server {
    listen      80;
    server_name dominio.com.br;

    ...

}

Asumiendo que usamos php-fpm, tendrán un bloque parecido a esto:

location ~ \.php$ {
    fastcgi_pass   unix:/var/run/php5-fpm.sock;
    fastcgi_index  index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

    ...

}

(En realidad, son unos cuantos parámetros)

O quizás están haciendo un include de /etc/nginx/fastcgi_params para los parámetros.

Cualquiera sea el caso, necesitamos agregar dos nuevos.

fastcgi_param MAGE_RUN_TYPE website;
fastcgi_param MAGE_RUN_CODE $mage_run_code;

Ahora, reiniciamos el webserver y ya tendríamos que tener disponibles los distintos websites con una única instancia.