lunes, 28 de octubre de 2013

Nginx: 413 Request Entity Too Large

Estaba yo todo "juicioso" trabajando como siempre cuando de repente me dicen: "La aplicación está dando un problema!!!" y bueno, quienes me conocen, saben que nunca me equivoco por lo que debía existir un error en el servidor.

Haciendo el respectivo "debug" me encontré conque Nginx estaba botando el siguiente error: 413 Request Entity Too Large.

La aplicación permite subir fotos y estaban intentando subir una foto de más de 2MB de tamaño.

Resulta que Nginx está configurado por defecto para permitir un tamaño de mensaje de máximo 2MB por lo que procedí a hacer el siguiente cambio:

En el archivo /etc/nginx/nginx.conf (el path puede cambiar de acuerdo al S.O y forma de instalación) agregué la siguiente linea:

client_max_body_size 5M;

luego recargué Nginx y listo.

/etc/init.d/nginx reload

lunes, 14 de octubre de 2013

¿Cómo eliminar múltiples archivos de un repositorio git?

Estaba en la tarea de actualizar la version de Sencha Touch en un proyecto en el que estoy trabajando corriendo el muy conocido comando

sencha app upgrade /path/a/la/nueva/version

y pues al hacer las respectivas pruebas y arreglos, me puse en la tarea de actualizar el repositorio, por lo que, corrí el otro muy conocido commando

git status

Y oh sorpresa, existían muchos pero muchos archivos en diferentes carpetas que debían ser eliminados del repositorio, junto con muchos que debían ser agregados (al haber sido modificados y/o creados).

Para agregar los nuevos el siguiente commando hace el milagro

git add /path/

Pero para borrar no puedo usar simplemente

git rm .

dado que borraría TODOS los archivos.

¿Y el recontra conocido git -a o git -u?

Pues serviría siempre y cuando quieras subir TODOS tus cambios (y a veces no quieres hacer eso)

Entonces, ¿cuál es la solución?

Facilísimo:

git ls-files --deleted -z | xargs -0 git rm

Y bueno expliquemos un poco:

git ls-files: lista archivos del indice de git
--deleted: solo muestra los archivos eliminados
-z: pone \0 (el conocido NUL) como terminador del string (util si el path tiene espacios)
|: concatena la salida del primer commando con el siguiente
xargs: permite concatenar argumentos y pasarlos a un comando (en este caso git rm)
-0: utiliza \0 como character de separación (por esto usamos -z en git ls-files)

martes, 8 de octubre de 2013

¿Cómo configurar Nginx para que utilice autenticación HTTP?

Estaba haciendo una migración de servidores y decidí cambiar Apache por Nginx, todo resultó bastante "sencillo", pero ¡oh sorpresa! uno de los sitios web necesita autenticación HTTP para funcionar como se espera.

Y bueno, caí en cuenta de que no tenía idea de como hacerlo por lo que luego de una pequeña búsqueda en google investigación pues encontré estos pasos:

1. Para poder generar el password cifrado utilicé Apache Utils por lo que ejecuté:
sudo apt-get install apache2-utils

2. Crear el usuario y el password
sudo htpasswd -c /path/donde/mantener/el/archivo/.htpasswd el_nombre_de_usuario

Pedirá el password:
New password:
Re-type new password:
Adding password for user el_nombre_de_usuario

3. Actualizar el archivo de configuración de Nginx
sudo vi /etc/nginx/sites/available/el_archivo_de_configuracion_del_sitio_web

En este archivo, en la sección location se debe agregar lo siguiente:

auth_basic "Restricted";
auth_basic_user_file /path/donde/mantener/el/archivo/.htpasswd;

Ejemplo:

server {
  listen      numero_de_puerto;
  server_name el_dominio.com;
  location / {
    root                 /el/path/a/la/raiz/del/sitio;
    auth_basic           "Restricted";
    auth_basic_user_file /el/path/al/archivo/.htpasswd;
}

4. Luego simplemente recargamos Nginx y listo:

sudo /etc/init.d/nginx