Búsqueda de sitios web

Cómo configurar la autenticación HTTP básica en Nginx


La autenticación HTTP básica es un mecanismo de seguridad para restringir el acceso a su sitio web/aplicación o a algunas partes de él mediante la configuración de una autenticación simple de nombre de usuario/contraseña. Se puede utilizar esencialmente para proteger todo el servidor HTTP, bloques de servidores individuales (hosts virtuales en Apache) o bloques de ubicación.

Lea también: Cómo configurar hosts virtuales basados en nombres e IP (bloques de servidores) con NGINX

Como sugiere el nombre, no es un método seguro en el que confiar; debe usarlo junto con otras medidas de seguridad más confiables. Por ejemplo, si su aplicación web se ejecuta en HTTP, las credenciales de usuario se transmiten en texto sin formato, por lo que debería considerar habilitar HTTPS.

El propósito de esta guía es ayudarlo a agregar una pequeña pero útil capa de seguridad para proteger el contenido privado/privilegiado en sus aplicaciones web (como, entre otras, las del administrador). También puede utilizarlo para impedir el acceso a un sitio web o aplicación que aún se encuentra en fase de desarrollo.

Requisitos

  1. Instale la pila LEMP en CentOS/RHEL 7
  2. Instalar la pila LEMP en Ubuntu/Debian

Crear archivo de usuario de autenticación HTTP

Deberías comenzar creando un archivo que almacenará pares nombre de usuario:contraseña. Usaremos la utilidad htpasswd del servidor HTTP Apache para crear este archivo.

Primero verifique que apache2-utils o httpd-tools, los paquetes que proporcionan la utilidad htpasswd estén instalados en su sistema; de lo contrario, ejecute el comando apropiado para tu distribución para instalarlo:

yum install httpd-tools		[RHEL/CentOS]
sudo apt install apache2-utils	[Debian/Ubuntu]

A continuación, ejecute el comando htpasswd a continuación para crear el archivo de contraseña con el primer usuario. La opción -c se utiliza para especificar el archivo passwd; una vez que presione [Enter], se le pedirá que ingrese la contraseña de usuario.

htpasswd -c /etc/nginx/conf.d/.htpasswd developer

Agregue un segundo usuario y no utilice la opción -c aquí.

htpasswd /etc/nginx/conf.d/.htpasswd admin

Ahora que tiene el archivo de contraseña listo, proceda a configurar las partes de su servidor web a las que desea restringir el acceso. Para ver el contenido del archivo de contraseñas (que incluye nombres de usuario y contraseñas cifradas), use el comando cat a continuación.

cat /etc/nginx/conf.d/.htpasswd 

Configurar la autenticación HTTP para Nginx

Como mencionamos anteriormente, puede restringir el acceso a su servidor web, a un único sitio web (usando su bloque de servidor) o a una directiva de ubicación. Para lograrlo se pueden utilizar dos directivas útiles.

  • auth_basic: activa la validación del nombre de usuario y la contraseña mediante el protocolo “Autenticación básica HTTP”.
  • auth_basic_user_file: especifica el archivo de contraseña.

Proteger con contraseña los hosts virtuales Nginx

Para implementar la autenticación básica para todo el servidor web, que se aplica a todos los bloques del servidor, abra el archivo /etc/nginx/nginx.conf y agregue las siguientes líneas en el contexto http:

http{
	auth_basic           "Restricted Access!";
    	auth_basic_user_file /etc/nginx/conf.d/.htpasswd; 
	……...
}

Proteger con contraseña el sitio web o dominio de Nginx

Para habilitar la autenticación básica para un dominio o subdominio en particular, abra su archivo de configuración en /etc/nginx/conf.d/ o /etc/nginx/conf/sites-available (dependiendo de cómo instaló Nginx), luego agregue la siguiente configuración en el bloque del servidor o contexto:

server {
	listen 			80;
	server_name    	  example.com;
	auth_basic           	"Restricted Access!";
    	auth_basic_user_file 	/etc/nginx/conf.d/.htpasswd; 
	location /  {
		……..
	}
	……...
}

Proteger con contraseña el directorio web en Nginx

También puede habilitar la autenticación básica dentro de una directiva de ubicación. En el siguiente ejemplo, a todos los usuarios que intenten acceder al bloque de ubicación /admin se les pedirá que se autentiquen.

server {
	listen 			80;
	server_name    	example.com www.example.com;
	
	location / {
		……..
	}
	location /admin/ {
		auth_basic           	"Restricted Access!";
    		auth_basic_user_file 	/etc/nginx/conf.d/.htpasswd; 
	}

	location /public/{
		auth_basic  off;	#turns off basic http authentication off for this block
	}
	……..
}

Si ha configurado la autenticación HTTP básica, a todos los usuarios que intenten acceder a su servidor web o a un subdominio o parte específica de un sitio (dependiendo de dónde lo implementó) se les solicitará un nombre de usuario y contraseña como se muestra en la captura de pantalla a continuación. .

En caso de que la autenticación de usuario falle, se mostrará el error "Autorización 401 requerida" como se muestra a continuación.

Puede encontrar más información en restringir el acceso con autenticación HTTP básica.

Es posible que también le interese leer las siguientes guías útiles relacionadas con el servidor HTTP Nginx.

  1. Cómo proteger con contraseña directorios web en Nginx
  2. La guía definitiva para proteger, reforzar y mejorar el rendimiento de Nginx
  3. Configuración de HTTPS con el certificado SSL Let's Encrypt para Nginx

En esta guía, mostramos cómo implementar la autenticación HTTP básica en el servidor web HTTP Nginx. Para hacer cualquier pregunta, utilice el formulario de comentarios a continuación.