如何在 Nginx 中配置基本 HTTP 身份验证
基本 HTTP 身份验证是一种安全机制,通过设置简单的用户名/密码身份验证来限制对您的网站/应用程序或其某些部分的访问。它本质上可用于保护整个 HTTP 服务器、单个服务器块(Apache 中的虚拟主机)或位置块。
另请阅读:如何使用 NGINX 设置基于名称和基于 IP 的虚拟主机(服务器块)
顾名思义,这不是一种值得信赖的安全方法;您应该将其与其他更可靠的安全措施结合使用。例如,如果您的 Web 应用程序在 HTTP 上运行,则用户凭据将以纯文本形式传输,因此您应该考虑启用 HTTPS。
本指南的目的是帮助您添加一个小但有用的安全层来保护 Web 应用程序上的私有/特权内容(例如但不限于管理员端)。您还可以使用它来阻止访问仍处于开发阶段的网站或应用程序。
要求
- 在 CentOS/RHEL 7 中安装 LEMP Stack
- 在 Ubuntu/Debian 中安装 LEMP Stack
创建HTTP认证用户文件
您应该首先创建一个用于存储用户名:密码
对的文件。我们将使用 Apache HTTP Server 中的 htpasswd 实用程序来创建此文件。
首先检查您的系统上是否安装了 apache2-utils 或 httpd-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 服务器相关指南。
- 如何在 Nginx 中使用密码保护 Web 目录
- 保护、强化和提高 Nginx 性能的终极指南
- 使用 Let’s Encrypt SSL 证书为 Nginx 设置 HTTPS
在本指南中,我们展示了如何在 Nginx HTTP Web 服务器中实现基本的 HTTP 身份验证。要提出任何问题,请使用下面的反馈表。