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.