网站搜索

如何在 Nginx 中配置基本 HTTP 身份验证


基本 HTTP 身份验证是一种安全机制,通过设置简单的用户名/密码身份验证来限制对您的网站/应用程序或其某些部分的访问。它本质上可用于保护整个 HTTP 服务器、单个服务器块(Apache 中的虚拟主机)或位置块。

另请阅读:如何使用 NGINX 设置基于名称和基于 IP 的虚拟主机(服务器块)

顾名思义,这不是一种值得信赖的安全方法;您应该将其与其他更可靠的安全措施结合使用。例如,如果您的 Web 应用程序在 HTTP 上运行,则用户凭据将以纯文本形式传输,因此您应该考虑启用 HTTPS。

本指南的目的是帮助您添加一个小但有用的安全层来保护 Web 应用程序上的私有/特权内容(例如但不限于管理员端)。您还可以使用它来阻止访问仍处于开发阶段的网站或应用程序。

要求

  1. 在 CentOS/RHEL 7 中安装 LEMP Stack
  2. 在 Ubuntu/Debian 中安装 LEMP Stack

创建HTTP认证用户文件

您应该首先创建一个用于存储用户名:密码对的文件。我们将使用 Apache HTTP Server 中的 htpasswd 实用程序来创建此文件。

首先检查您的系统上是否安装了 apache2-utilshttpd-tools(提供 htpasswd 实用程序的软件包),否则运行相应的命令您的发行版来安装它:

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

接下来,运行下面的htpasswd命令来创建第一个用户的密码文件。 -c选项用于指定passwd文件,一旦您点击[Enter],系统将要求您输入用户密码。

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

添加第二个用户,并且不要在此处使用 -c 选项。

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

现在您已准备好密码文件,接下来配置您想要限制访问的 Web 服务器部分。要查看密码文件内容(包括用户名和加密密码),请使用下面的 cat 命令。

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

为 Nginx 配置 HTTP 身份验证

正如我们之前提到的,您可以限制对网络服务器、单个网站(使用其服务器块)或位置指令的访问。可以使用两个有用的指令来实现此目的。

  • auth_basic – 使用“HTTP 基本身份验证”协议启用用户名和密码验证。
  • auth_basic_user_file – 指定密码文件。

密码保护 Nginx 虚拟主机

要对整个 Web 服务器实施基本身份验证(适用于所有服务器块),请打开 /etc/nginx/nginx.conf 文件并在 http 上下文中添加以下行:

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

密码保护 Nginx 网站或域名

要为特定域或子域启用基本身份验证,请在 /etc/nginx/conf.d//etc/nginx/conf/sites-available 下打开其配置文件strong>(取决于您安装 Nginx 的方式),然后在服务器块或上下文中添加以下配置:

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

Nginx 中的密码保护 Web 目录

您还可以在位置指令中启用基本身份验证。在下面的示例中,所有尝试访问 /admin 位置块的用户都将被要求进行身份验证。

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
	}
	……..
}

如果您配置了基本 HTTP 身份验证,则所有尝试访问您的网络服务器或子域或站点特定部分(取决于您实现的位置)的用户都将被要求提供用户名和密码,如下面的屏幕截图所示。

如果用户身份验证失败,将显示“401 Authorization Need”错误,如下所示。

您可以在使用基本 HTTP 身份验证限制访问中找到更多信息。

您可能还想阅读以下有用的 Nginx HTTP 服务器相关指南。

  1. 如何在 Nginx 中使用密码保护 Web 目录
  2. 保护、强化和提高 Nginx 性能的终极指南
  3. 使用 Let’s Encrypt SSL 证书为 Nginx 设置 HTTPS

在本指南中,我们展示了如何在 Nginx HTTP Web 服务器中实现基本的 HTTP 身份验证。要提出任何问题,请使用下面的反馈表。