La forma de proteger un directorio o ruta de nuestro sitio web con contraseña en Nginx es similar a la de Apache, aunque con ciertas diferencias, en cualquier caso, sigue siendo muy sencillo y de gran utilidad para dotar de una capa extra de seguridad ciertas secciones de un sitio web.

En apache usamos la combinación htpasswd/htaccess y la directiva AuthType. En el caso de nginx, es prácticamente igual aunque prescindiendo del fichero .htaccess , que en Nginx no existe.

¿Cómo lo hacemos entonces? Muy fácil, hacemos uso de las directivas de autenticación auth_basic y auth_basic_user_file dentro de un bloque de localización «location» que especifica la ruta a proteger:

location /foobar { auth_basic "Acceso restringido"; auth_basic_user_file /var/www/foo/.htpasswd; }

Recordad hacer un reload de la configuración de Nginx tras aplicar estos cambios.

#systemctl reload nginx

Como véis, la directiva auth_basic es meramente informativa, pues muestra el mensaje que aparecerá en el título de la ventana emergente que solicitará la autenticación. La otra directiva, auth_basic_user_file , especifica la ruta donde se encuentra el archivo .htpasswd, que contiene el listado de usuarios permitidos. Ejemplo de .htpasswd :

foo:$apr1$..9rpNqE$.BG6C6tQcrel1XliLrIPT1 bar:$apr1$..9rpNqE$.Va336tacreV3bxiLaIP34

Este archivo almacena los usuarios y contraseñas para la autenticación básica HTTP que vamos a utilizar. Los usuarios «foo» y «bar» tendrían acceso permitido con contraseña a la ruta /foobar. Recordad que podéis generar estos archivos tanto online como desde línea de comandos:

# htpasswd -cb .htpasswd foo mipassword

# cat .htpasswd foo:$apr1$..9rpNqE$.BG6C6tQcrel1XliLrIPT1

Recordad ubicar este archivo fuera de la ruta pública del sitio web, o sino, bloquearlo adecuadamente para que no sea accesible desde Internet.