Nginx · 3 min read · Jan 23, 2026

Autenticación HTTP básica con Nginx

Este tutorial muestra cómo puedes usar la autenticación HTTP básica con Nginx para proteger con contraseña directorios en tu servidor o incluso un sitio web completo. Este es el equivalente de Nginx a la autenticación HTTP básica en Apache con .htaccess /.htpasswd.

1 Nota Preliminar

Estoy usando el sitio web www.example.com aquí con la raíz del documento /var/www/www.example.com/web/ y el archivo de configuración del vhost de Nginx /etc/nginx/sites-enabled/www.example.com.vhost. El directorio que quiero proteger con contraseña es /var/www/www.example.com/web/test/.

2 Creando el Archivo de Contraseña

Necesitamos un archivo de contraseña donde se enumeren los usuarios que deberían poder iniciar sesión con sus contraseñas (en forma encriptada). Para crear dicho archivo de contraseña, podemos usar la herramienta htpasswd de Apache, o podemos usar el script de Python de http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py.

2.1 Usando el Comando htpasswd de Apache

Si deseas usar el comando htpasswd de Apache, verifica si existe en tu sistema:

which htpasswd
root@server1:~# which htpasswd  
/usr/bin/htpasswd  
root@server1:~#

Si obtienes una salida como la anterior, todo está bien: htpasswd ya está instalado. Si el comando devuelve sin ninguna salida, htpasswd no existe en tu sistema y debes instalarlo. En Debian/Ubuntu, es parte del paquete apache2-utils que podemos instalar de la siguiente manera:

apt-get -y install apache2-utils

Quiero crear el archivo de contraseña /var/www/www.example.com/.htpasswd ahora y almacenar el usuario falko en él (puedes darle al archivo de contraseña cualquier nombre que desees; no es necesario nombrarlo .htpasswd; solo lo nombré .htpasswd porque así se nombran los archivos de contraseña en Apache):

htpasswd -c /var/www/www.example.com/.htpasswd falko

Se te pedirá una contraseña para el usuario falko. Ten en cuenta que el interruptor -c hace que el archivo se cree desde cero; si no existía antes, se creará; si existía antes, se sobrescribirá con uno nuevo y todos los usuarios del archivo antiguo se perderán. Por lo tanto, si deseas agregar otro usuario sin eliminar todos los usuarios existentes, usa el comando htpasswd sin el interruptor -c:

htpasswd /var/www/www.example.com/.htpasswd till

El último comando agrega al usuario till a /var/www/www.example.com/.htpasswd para que ahora tengamos los usuarios falko y till en él.

2.2 Usando el Script de Python htpasswd.py

Si no deseas o no puedes usar el comando htpasswd de Apache, puedes usar el script de Python de http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py.

Lo descargamos a /usr/local/bin y lo hacemos ejecutable de la siguiente manera:

cd /usr/local/bin  
wget http://trac.edgewall.org/export/14464/trunk/contrib/htpasswd.py  
chmod 755 /usr/local/bin/htpasswd.py

Quiero crear el archivo de contraseña /var/www/www.example.com/.htpasswd ahora y almacenar el usuario falko en él (puedes darle al archivo de contraseña cualquier nombre que desees; no es necesario nombrarlo .htpasswd; solo lo nombré .htpasswd porque así se nombran los archivos de contraseña en Apache):

htpasswd.py -c -b /var/www/www.example.com/.htpasswd falko falkossecret

Por favor, reemplaza falkossecret con una contraseña para el usuario falko. Ten en cuenta que el interruptor -c hace que el archivo se cree desde cero; si no existía antes, se creará; si existía antes, se sobrescribirá con uno nuevo y todos los usuarios del archivo antiguo se perderán. Por lo tanto, si deseas agregar otro usuario sin eliminar todos los usuarios existentes, usa el comando htpasswd.py sin el interruptor -c:

htpasswd.py -b /var/www/www.example.com/.htpasswd till tillssecret

El último comando agrega al usuario till a /var/www/www.example.com/.htpasswd para que ahora tengamos los usuarios falko y till en él.

3 Configurando Nginx

Ahora que tenemos nuestro archivo de contraseña en su lugar, solo necesitamos agregarlo a nuestra configuración del vhost de Nginx en /etc/nginx/sites-enabled/www.example.com.vhost, dentro del contenedor server {}.

nano /etc/nginx/sites-enabled/www.example.com.vhost

Porque quiero proteger con contraseña el directorio de prueba en la raíz del documento, uso location /test {} aquí (para proteger con contraseña todo el sitio web, usarías location / {}):

server {
       listen 80;
       server_name www.example.com example.com;
       root /var/www/www.example.com/web;
[...]  
       location /test {
                auth_basic "Restringido";
                auth_basic_user_file /var/www/www.example.com/.htpasswd;
       }
[...]  
}

Recarga Nginx después:

service nginx reload

¡Eso es todo! Ahora puedes ir a tu directorio de prueba en un navegador ( http://www.example.com/test), y se te pedirá un nombre de usuario y una contraseña:

Solicitud de autenticación básica de Nginx (.htpasswd).

Si ingresas el nombre de usuario y la contraseña correctos, se te concederá acceso:

Login ok.

De lo contrario, verás un mensaje de error 401 Authorization Required:

Autorización requerida de Nginx.

4 Enlaces

Acerca del Autor

Falko Timme es el propietario de Timme Hosting (alojamiento web nginx ultra-rápido). Es el mantenedor principal de HowtoForge (desde 2005) y uno de los desarrolladores principales de ISPConfig (desde 2000). También ha contribuido al libro de O’Reilly “Administración del Sistema Linux”.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.