GNU/Linux >> Tutoriales Linux >  >> Linux

Autenticación HTTP básica con Nginx

Este tutorial muestra cómo puede usar la autenticación HTTP básica con Nginx para proteger directorios con contraseña en su servidor o incluso en 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 de Nginx vhost /etc/nginx/sites-enabled/www.example.com. anfitrión El directorio que quiero proteger con contraseña es /var/www/www.example.com/web/test/.

2 Creando el Archivo de Contraseñas

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

2.1 Usando el comando htpasswd de Apache

Si desea utilizar el comando htpasswd de Apache, compruebe si existe en su sistema:

which htpasswd
[email protected]:~# which htpasswd
/usr/bin/htpasswd
[email protected]:~#

Si obtiene un resultado como el de arriba, todo está bien:htpasswd ya está instalado. Si el comando regresa sin ningún resultado, htpasswd no existe en su sistema y debe 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 (puede darle al archivo de contraseña el nombre que desee, no es necesario llamarlo .htpasswd; yo simplemente lo nombré .htpasswd porque así se nombran los archivos de contraseña en Apache):

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

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

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

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

2.2 Uso de la secuencia de comandos de Python htpasswd.py

Si no quiere o no puede usar el comando htpasswd de Apache, puede usar la secuencia de comandos de Python desde 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 (puede darle al archivo de contraseña el nombre que desee, no es necesario llamarlo .htpasswd; yo simplemente 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

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

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

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

3 Configuración de Nginx

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

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

Como quiero proteger con contraseña el directorio de prueba en la raíz del documento, uso la ubicación / prueba {} aquí (para proteger con contraseña todo el sitio web, usaría la ubicación / {}):

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

Vuelva a cargar Nginx después:

service nginx reload

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

Si ingresa el nombre de usuario y la contraseña correctos, se le otorgará acceso:

De lo contrario, verá un mensaje de error 401 Autorización requerida:

4 Enlaces

  • Nginx:http://nginx.org/
  • Wiki de Nginx:http://wiki.nginx.org/
  • htpasswd.py Secuencia de comandos Python:http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py

Acerca del autor

Falko Timme es el propietario de Timme Hosting (alojamiento web nginx ultrarrápido). Es el mantenedor principal de HowtoForge (desde 2005) y uno de los principales desarrolladores de ISPConfig (desde 2000). También ha contribuido al libro de O'Reilly "Administración del sistema Linux".


Linux
  1. nginx - 413 Entidad de solicitud demasiado grande

  2. Cómo instalar el servidor HTTP Git con Nginx en Ubuntu 20.04

  3. Cómo instalar el servidor HTTP Git con Nginx en Debian 11

  4. Redirigir HTTP a HTTPS en NginX

  5. ¿Autenticación Https con Axel Downloader?

Cómo instalar TYPO3 8.1 con Nginx (LEMP) en Ubuntu 16.04

Cómo usar GeoIP con Nginx en Ubuntu 16.04

Corrección de HTTP básico:acceso denegado y error de falla de autenticación fatal con GitLab

Cómo configurar PHP-FPM con NGINX

Instalar WordPress con Nginx en Ubuntu 18.04

Cómo configurar Nginx con soporte HTTP/2 en Ubuntu 18.04