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 htpasswdroot@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-utilsQuiero 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 falkoSe 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 tillEl ú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.pyQuiero 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 falkossecretPor 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 tillssecretEl ú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.vhostPorque 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:

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

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

4 Enlaces
- Nginx: http://nginx.org/
- Wiki de Nginx: http://wiki.nginx.org/
- Script de Python htpasswd.py: http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py
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”.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.