Cómo proteger con contraseña una web o carpeta con nginx

Si necesitamos proteger una web o un directorio de una web con nginx sólo hay que seguir estos 2 pasos:

Tabla de contenidos

 

Generar un fichero con el usuario y clave

Si ya tenemos un fichero de usuarios clave de apache lo podemos reutilizar en nginx, pero si lo tenemos que crear hay dos formas de hacerlo:

En el ejemplo crearemos el fichero de claves en /etc/nginx/.htpasswd

Usando el comando de apache2-utils htpasswd

sudo htpasswd -c /etc/nginx/.htpasswd usuario

con openssl

echo -n "usuario:" >> /etc/nginx/.htpasswd
openssl passwd -apr1 >> /etc/nginx/.htpasswd

de esta forma nos quedará algo así en el fichero

test2:$apr1$o4Lmm4.x$joXl8SfzA2tYPVtRQPTtF0

Configurar nginx

Sólo tenemos añadir al location que queremos proteger dos líneas:
auth_basic «acceso prohibido»; para indicar que vamos a usar usuario y contraseña para ese location
auth_basic_user_file /etc/nginx/.htpasswd; para decirle donde está el fichero con el usuario y contraseña

Por ejemplo para proteger el acceso a un wordpress:

location / {
	auth_basic "acceso prohibido";
	auth_basic_user_file /etc/nginx/.htpasswd;
 
	try_files $uri $uri/ /index.php?q=$uri&$args;
}