如何设置密码验证与Nginx的在Ubuntu 14.04

介绍

设置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

在里面,删除注释,文件应该看起来像这样:

/ 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的到我们创建的密码文件:

/ 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;
        auth_basic "Restricted Content";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

保存并在完成后关闭文件。 重新启动Nginx以实现您的密码策略:

sudo service nginx restart

您指定的目录现在应该受密码保护。

确认密码验证

要确认您的内容受到保护,请尝试在网络浏览器中访问受限制的内容。 您应该看到一个用户名和密码提示,如下所示:

Nginx密码提示

如果输入正确的凭据,您将被允许访问内容。 如果输入错误的凭据或点击“取消”,您将看到“需要授权”错误页面:

Nginx未授权的错误

结论

您现在应该拥有为网站设置基本身份验证所需的一切。 请记住,密码保护应与SSL加密结合使用,以便您的凭据不会以纯文本发送到服务器。 要了解如何创建Nginx的使用自签名的SSL证书,请按照本指南 要了解如何安装商业证书,请按照本指南

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏