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 algunas partes del mismo configurando 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.

Como sugiere el nombre, no es un método seguro en el que confiar; debe utilizarlo junto con otras medidas de seguridad más fiables. Por ejemplo, si su aplicación web se ejecuta en HTTP, las credenciales de usuario se transmiten en texto sin formato, por lo que debe 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 otros, los administradores). También puede usarlo para evitar el acceso a un sitio web o aplicación que aún se encuentra en la fase de desarrollo.

  1. Instale LEMP Stack en CentOS/RHEL 7
  2. Instale LEMP Stack en Ubuntu/Debian

Crear archivo de usuario de autenticación HTTP

Debe comenzar creando un archivo que almacenará pares nombre de usuario: contraseña . Usaremos la utilidad htpasswd de Apache HTTP Server 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 su 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 usa 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 use 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 encriptadas), 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, un solo sitio web (usando su bloque de servidor) o una directiva de ubicación. Se pueden usar dos directivas útiles para lograr esto.

  • 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.

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 líneas siguientes en el contexto http:

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

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 haya instalado Nginx), luego agregue el configuración a continuación en el bloque de servidor o contexto:

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

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 un subdominio o parte específica de un sitio (dependiendo de dónde lo implementó), se les pedirá un nombre de usuario y una contraseña como se muestra en la captura de pantalla a continuación. .

En caso de una autenticación de usuario fallida, se mostrará un error de "Se requiere autorización 401" como se muestra a continuación.

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

Es posible que también desee leer estas guías útiles relacionadas con el servidor HTTP Nginx.

  1. Cómo proteger con contraseña los directorios web en Nginx
  2. La guía definitiva para proteger, fortalecer y mejorar el rendimiento de Nginx
  3. Configuración de HTTPS con cifremos el certificado SSL 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.