介绍
设置Web服务器时,通常您希望限制访问的网站部分。 Web应用程序通常提供自己的身份验证和授权方法,但如果Web服务器本身不足或不可用,则可以用于限制访问。
在本指南中,我们将演示如何密码保护在Ubuntu 14.04上运行的Nginx Web服务器上的资产。
先决条件
要开始,您需要访问Ubuntu 14.04服务器环境。 您将需要一个非root用户sudo
权限,以执行管理任务。 要了解如何创建这样的用户,按照我们的Ubuntu 14.04服务器初始设置指南 。
如果你还没有这样做,通过键入以下命令在你的机器上安装Nginx:
sudo apt-get update
sudo apt-get install nginx
创建密码文件
首先,我们需要创建一个包含用户名和密码组合的文件。 您可以使用您的服务器上已经可用的OpenSSL实用程序来执行此操作。 另外,您也可以使用特制htpasswd
包含在实用apache2-utils
包(Nginx的密码文件使用相同的格式的Apache)。 选择以下您最喜欢的方法。
使用OpenSSL实用程序创建密码文件
如果您在服务器上安装了OpenSSL,则可以创建没有其他软件包的密码文件。 我们将创建一个名为隐藏文件.htpasswd
中/etc/nginx
配置目录来存储用户名和密码组合。
您可以使用此命令为文件添加用户名。 我们使用的是sammy
为我们的用户名,但你可以使用自己喜欢的任意名称:
sudo sh -c "echo -n 'sammy:' >> /etc/nginx/.htpasswd"
接下来,通过键入以下内容为用户名添加加密的密码条目:
sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"
您可以对其他用户名重复此过程。 您可以通过键入以下内容查看文件中用户名和加密密码的存储方式:
cat /etc/nginx/.htpasswd
Outputsammy:$apr1$wI1/T0nB$jEKuTJHkTOOWkopnXqC1d1
使用Apache实用程序创建密码文件
虽然OpenSSL可以加密Nginx身份验证的密码,但许多用户发现使用专用实用程序更容易。 在htpasswd
工具,在发现apache2-utils
包,服务于这个功能不错。
安装apache2-utils
键入您的服务器上的包:
sudo apt-get update
sudo apt-get install apache2-utils
现在,你可以访问htpasswd
命令。 我们可以使用它来创建Nginx可以用来验证用户的密码文件。 我们将为此创建一个名为隐藏文件.htpasswd
我们中/etc/nginx
配置目录。
我们使用这个工具的第一次,我们需要添加-c
选项来创建指定的文件。 我们指定一个用户名( sammy
在命令的结尾在这个例子中)创建该文件中的新条目:
sudo htpasswd -c /etc/nginx/.htpasswd sammy
系统将要求您提供并确认用户的密码。
离开了-c
参数为您要添加任何额外的用户:
sudo htpasswd /etc/nginx/.htpasswd another_user
如果我们查看文件的内容,我们可以看到每个记录的用户名和加密密码:
cat /etc/nginx/.htpasswd
Outputsammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.
配置Nginx密码验证
现在我们有一个文件与我们的用户和密码以Nginx可以读取的格式,我们需要配置Nginx检查此文件之前,我们的受保护的内容。
首先打开您希望添加限制的服务器块配置文件。 在我们的例子中,我们将使用default
通过Ubuntu的软件包的Nginx安装的服务器块文件:
sudo nano /etc/nginx/sites-enabled/default
在里面,删除注释,文件应该看起来像这样:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.html index.htm;
server_name localhost;
location / {
try_files $uri $uri/ =404;
}
}
要设置身份验证,您需要决定要限制的上下文。 在其他选择中,Nginx允许您设置对服务器级别或特定位置内的限制。 在我们的示例中,我们将使用位置块限制整个文档根目录,但您可以修改此列表以仅定位网络空间中的特定目录:
在这个位置块,使用auth_basic
指令打开身份验证并选择提示输入凭据时要显示给用户的领域名称。 我们将使用auth_basic_user_file
指令以指向Nginx的到我们创建的密码文件:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.html index.htm;
server_name localhost;
location / {
try_files $uri $uri/ =404;
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
保存并在完成后关闭文件。 重新启动Nginx以实现您的密码策略:
sudo service nginx restart
您指定的目录现在应该受密码保护。
确认密码验证
要确认您的内容受到保护,请尝试在网络浏览器中访问受限制的内容。 您应该看到一个用户名和密码提示,如下所示:
如果输入正确的凭据,您将被允许访问内容。 如果输入错误的凭据或点击“取消”,您将看到“需要授权”错误页面:
结论
您现在应该拥有为网站设置基本身份验证所需的一切。 请记住,密码保护应与SSL加密结合使用,以便您的凭据不会以纯文本发送到服务器。 要了解如何创建Nginx的使用自签名的SSL证书,请按照本指南 。 要了解如何安装商业证书,请按照本指南 。