介绍
网页应用程序通常提供自己的身份验证和授权方法,但如果这些方法不足或不可用,则可以使用网页服务器本身来限制访问。
在本指南中,我们将展示如何在运行 Ubuntu 14.04 的 Nginx Web 服务器上密码保护资产。
前提条件
要开始,您需要访问Ubuntu 14.04服务器环境,您需要具有sudo
特权的非根用户才能执行管理任务。 要了解如何创建这样的用户,请遵循我们的Ubuntu 14.04初始服务器设置指南(https://andsky.com/tech/tutorials/initial-server-setup-with-ubuntu-14-04)。
如果您尚未这样做,请通过键入在您的机器上安装 Nginx:
1sudo apt-get update
2sudo apt-get install nginx
创建密码文件
要开始,我们需要创建包含我们的用户名和密码组合的文件。您可以使用可能已经在您的服务器上可用的OpenSSL实用程序来做到这一点。 或者,您可以使用包含在apache2-utils
包中的htpasswd
实用程序(Nginx密码文件使用与Apache相同的格式)。
使用 OpenSSL 工具创建密码文件
如果您在您的服务器上安装了 OpenSSL,您可以创建一个密码文件,而无需额外的软件包,我们将在/etc/nginx
配置目录中创建一个名为.htpasswd
的隐藏文件,以存储我们的用户名和密码组合。
您可以使用此命令将用户名添加到文件中. 我们正在使用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
使用Apache实用程序创建密码文件
虽然OpenSSL可以加密 Nginx 身份验证的密码,但许多用户发现使用专门的实用程序更容易。
在您的服务器上安装apache2-utils
包,键入:
1sudo apt-get update
2sudo apt-get 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.
配置 Nginx 密码验证
现在我们有一个文件,我们的用户和密码在一个格式, Nginx 可以读取,我们需要配置 Nginx 检查这个文件,然后提供我们的受保护的内容。
首先,打开您想要添加限制的服务器封锁配置文件,为我们的示例,我们将使用通过Ubuntu的Nginx包安装的默认
服务器封锁文件:
1sudo nano /etc/nginx/sites-enabled/default
内部,随着评论被删除,文件应该看起来像这样:
1[label /etc/nginx/sites-enabled/default]
2server {
3 listen 80 default_server;
4 listen [::]:80 default_server ipv6only=on;
5
6 root /usr/share/nginx/html;
7 index index.html index.htm;
8
9 server_name localhost;
10
11 location / {
12 try_files $uri $uri/ =404;
13 }
14}
要设置身份验证,您需要决定限制的背景。 其他选项中, Nginx 允许您在服务器级别或特定位置设置限制。 在我们的示例中,我们将限制整个文档根以位置封锁,但您可以更改此列表以仅针对 Web 空间中的特定目录:
在这个位置块中,使用auth_basic
指令来启用身份验证并选择一个域名来显示给用户,当我们要求身份验证时。
1[label /etc/nginx/sites-enabled/default]
2server {
3 listen 80 default_server;
4 listen [::]:80 default_server ipv6only=on;
5
6 root /usr/share/nginx/html;
7 index index.html index.htm;
8
9 server_name localhost;
10
11 location / {
12 try_files $uri $uri/ =404;
13 auth_basic "Restricted Content";
14 auth_basic_user_file /etc/nginx/.htpasswd;
15 }
16}
完成后保存并关闭文件. 重新启动 Nginx 以执行您的密码策略:
1sudo service nginx restart
您指定的目录现在应该被密码保护。
确认密码身份验证
要确认您的内容是受保护的,请尝试在 Web 浏览器中访问受限制的内容. 您应该看到一个用户名和密码提示,它看起来像这样:
如果您输入正确的凭证,您将被允许访问内容. 如果您输入错误的凭证或点击取消
,您将看到需要授权
错误页面:
结论
您现在应该拥有为您的网站设置基本身份验证所需的一切。请记住,密码保护应与SSL加密相结合,以便您的身份验证不会以简单的文本发送到服务器。 若要了解如何创建一个自签名的SSL证书以与 Nginx 使用,请遵循 此指南. 若要了解如何安装商业证书,请遵循 此指南。