介绍
网页应用程序通常提供自己的身份验证和授权方法,但网页服务器本身可以用来限制访问,如果这些不充分或不可用。
前提条件
要开始,你需要:
要了解如何创建这样的用户,请遵循 Ubuntu 20.04 初始服务器设置指南。
- Nginx 安装在您的系统上,遵循本指南的 步骤 1 和 2 在 如何在 Ubuntu 20.04 上安装 Nginx
步骤 1 - 创建密码文件
要开始,你需要创建一个包含你的用户名和密码组合的文件。你可以使用可能已经在你的服务器上可用的OpenSSL实用程序来做到这一点。 或者,你可以使用包含在apache2-utils
包中的专用htpasswd
实用程序(Nginx密码文件使用与Apache相同的格式)。
选项 1 – 使用 OpenSSL 实用程序创建密码文件
如果你在你的服务器上安装了 OpenSSL,你可以创建一个密码文件,没有额外的包,你将创建一个名为.htpasswd
的隐藏文件在/etc/nginx
配置目录中,以存储你的用户名和密码组合。
您可以使用此命令将用户名添加到文件中。‘sammy’在这里被用作用户名,但您可以使用任何您想要的名称:
1sudo sh -c "echo -n 'sammy:' >> /etc/nginx/.htpasswd"
接下来,通过键入用户名添加加加密密码输入:
1sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"
您可以重复此过程以获取额外的用户名,您可以通过键入以下方式查看用户名和加密密码存储在文件中:
1cat /etc/nginx/.htpasswd
1[secondary_label Output]
2sammy:$apr1$wI1/T0nB$jEKuTJHkTOOWkopnXqC1d1
选项2:使用Apache实用程序创建密码文件
虽然OpenSSL可以加密 Nginx 身份验证的密码,但许多用户发现使用专门的实用程序更容易。
在您的服务器上安装apache2-utils
包,键入:
1sudo apt update
2sudo apt install apache2-utils
现在,您可以访问htpasswd
命令,您可以使用此命令创建一个密码文件, Nginx 可以使用它来验证用户。在您的/etc/nginx
配置目录中创建一个名为.htpasswd
的隐藏文件。
第一次使用此实用程序时,您需要添加-c
选项来创建指定的文件,在命令的末尾指定用户名(在本示例中sammy
)以在文件中创建新条目:
1sudo htpasswd -c /etc/nginx/.htpasswd sammy
您将被要求提供并确认用户的密码。
留下您想要添加的任何额外用户的 -c
参数:
1sudo htpasswd /etc/nginx/.htpasswd another_user
如果您查看文件的内容,您可以看到每个记录的用户名和加密密码:
1cat /etc/nginx/.htpasswd
1[secondary_label Output]
2sammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
3another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.
步骤 2 – 配置 Nginx 密码验证
现在你有一个文件,你的用户和密码在一个格式, Nginx 可以读取,你需要配置 Nginx 来检查这个文件,在服务你的受保护的内容。
例如,您将使用通过Ubuntu的Nginx包安装的默认
服务器封锁文件:
1sudo nano /etc/nginx/sites-enabled/default
要设置身份验证,您需要决定要限制的背景;在其他选项中, Nginx 允许您在服务器级别或特定位置设置限制。
此示例将用于服务器级别限制. 该auth_basic
指令将启用身份验证和一个域名,以便在请求身份验证时向用户显示。
1[label /etc/nginx/sites-enabled/default]
2server {
3 listen 80 default_server;
4
5 . . .
6
7 auth_basic "Restricted Content";
8 auth_basic_user_file /etc/nginx/.htpasswd;
9}
<$>[注] 注: 根据您设置限制的区块,您可以控制网站的哪些部分需要密码的细微性。
1[label /etc/nginx/sites-enabled/default]
2server {
3 listen 80 default_server;
4
5 . . .
6
7 location / {
8 try_files $uri $uri/ =404;
9 auth_basic "Restricted Content";
10 auth_basic_user_file /etc/nginx/.htpasswd;
11 }
12}
美元
完成后保存并关闭文件. 重新启动 Nginx 以执行您的密码策略:
1sudo systemctl restart nginx
您指定的目录现在应该被密码保护。
步骤 3 – 确认密码身份验证
若要确认您的内容是受保护的,请尝试在 Web 浏览器中访问受限制的内容:
1http://server_domain_or_IP
您应该提供一个用户名和密码提示:
如果您输入正确的凭证,您将被允许访问内容. 如果您输入错误的凭证或点击取消
,您将看到需要授权
错误页面:
结论
您现在应该拥有为您的网站设置基本身份验证所需的一切。请记住,密码保护应该与 TLS 加密相结合,以便您的身份验证不会以简单的文本发送到服务器。