如何在Ubuntu 14.04上使用Nginx设置密码验证

介绍

设置Web服务器时,通常会希望限制访问的站点部分。Web应用程序通常提供自己的身份验证和授权方法,但如果Web服务器不足或不可用,则可以使用Web服务器本身来限制访问。

在本指南中,我们将演示如何在Ubuntu 14.04上运行的Nginx Web服务器上用密码保护资产。

先决条件

首先,您需要访问Ubuntu 14.04服务器环境。您将需要具有sudo权限的非root用户才能执行管理任务。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器

如果您还没有这样做,请输入以下命令在您的计算机上安装Nginx:

sudo apt-get update
sudo apt-get install nginx

创建密码文件

首先,我们需要创建保存用户名和密码组合的文件。您可以使用服务器上已有的OpenSSL实用程序来执行此操作。或者,您可以使用apache2-utils包中包含的专用实用程序htpasswd(Nginx密码文件使用与Apache相同的格式)。你可以从以下选择您最喜欢的方法。

使用OpenSSL实用程序创建密码文件

如果您的服务器上安装了OpenSSL,则可以创建一个没有其他软件包的密码文件。我们将在配置目录/etc/nginx中创建一个名为.htpasswd的隐藏文件来存储我们的用户名和密码组合。

您可以使用此命令为文件添加用户名。我们使用的sammy来作为我们的用户名,但您可以使用您喜欢的任何名称:

sudo sh -c "echo -n 'sammy:' >> /etc/nginx/.htpasswd"

接下来,输入以下内容为用户名添加加密密码条目:

sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"

您可以为其他用户名重复此过程。您可以通过键入以下内容来查看用户名和加密密码如何存储在文件中:

cat /etc/nginx/.htpasswd
sammy:$apr1$wI1/T0nB$jEKuTJHkTOOWkopnXqC1d1

使用Apache Utilities创建密码文件

虽然OpenSSL可以加密Nginx身份验证的密码,但许多用户发现使用专用实用程序更容易。apache2-utils包装中的htpasswd实用程序很好地发挥了这种功能。

键入以下命令在服务器上安装软件包apache2-utils

sudo apt-get update
sudo apt-get install apache2-utils

现在,您可以访问该htpasswd命令。我们可以使用它来创建一个Nginx可用于验证用户身份的密码文件。我们将在配置目录/etc/nginx中为此目的创建一个名为.htpasswd的隐藏文件。

我们第一次使用此实用程序时,需要添加-c选项以创建指定的文件。我们sammy在命令末尾指定用户名(在此示例中)以在文件中创建新条目:

sudo htpasswd -c /etc/nginx/.htpasswd sammy

系统将要求您提供并确认用户的密码。

对于您要添加的任何其他用户的参数,省略-c

sudo htpasswd /etc/nginx/.htpasswd another_user

如果我们查看文件的内容,我们可以看到每条记录的用户名和加密密码:

cat /etc/nginx/.htpasswd
sammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.

配置Nginx密码验证

现在我们有一个文件,我们的用户和密码的格式是Nginx可以读取的,我们需要配置Nginx来检查这个文件,然后才能提供受保护的内容。

首先打开要添加限制的服务器块配置文件。对于我们的示例,我们将使用通过Ubuntu的Nginx包安装的default服务器块文件:

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允许您在服务器级别或特定位置内设置限制。在我们的示例中,我们将使用位置块限制整个文档根目录,但您可以修改此列表以仅定位Web空间中的特定目录:

在此位置块中,使用该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证书,请按照如何为Nginx创建自签名SSL证书操作。

更多Ubuntu教程请前往腾讯云+社区学习更多知识。


参考文献:《How To Set Up Password Authentication with Nginx on Ubuntu 14.04》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IMWeb前端团队

服务器操作规范(初稿)

本文作者:IMWeb moonye 原文出处:IMWeb社区 未经同意,禁止转载 服务器操作规范(初稿) 一切操作都需要在确保安全的前提下进行 安全规...

64980
来自专栏EarlGrey的专栏

如何正确配置 Ubuntu 14.04 服务器?

本文将介绍在云厂商购买 Ubuntu 服务器之后,为了确保服务器的安全,开发者应该要做的一些配置。完成本文的操作之后,服务器的安全性将得到更好的保障。

1.7K30
来自专栏androidBlog

Git ssh 配置及使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/...

45420
来自专栏性能与架构

web安全 - 文件上传漏洞

文件上传本身是互联网中最为常见的一种功能需求,所以文件上传漏洞攻击是非常常见,并且是危害极大的 常见安全问题 1) 上传文件是Web脚本语言,服务器的Web...

37370
来自专栏Spring相关

Git ssh 配置及使用

前言:前几天在写博客 手把手教你用Hexo + github 搭建自己博客的时候,经常需要用到一些git操作,截了好多图,于是就想干脆整理成一系列的git 教程...

10820
来自专栏维C果糖

IntelliJ IDEA 缓存和索引的介绍及清理方法

在博文“ 详述 IntelliJ IDEA 的使用界面 ”中,博主说过这样一句话“ 对于首次创建或打开的新项目,IntelliJ IDEA 都会创建项目索引,大...

46460
来自专栏FreeBuf

Firefox新增安全机制:附加组件签名机制

根据Net MarketShare的数据显示,2016年8月份Firefox浏览器占全球市场份额7.69%,仅次于Chrome和IE,排名第三。可见,Firef...

21950
来自专栏FreeBuf

权限后门系列之一:手动打造WordPress权限后门

权限后门是最容易被管理员忽视的环节,通常需要对系统进行全面检查才能发现。本文以Wordpress为例,介绍两种新型的后门方式。 方案1 - 自动登录管理员账号 ...

27170
来自专栏农夫安全

文件上传漏洞超级大汇总-最最终篇

18、文件名大小写绕过上传限制 1. 首先访问网站页面,如下图: ? 1. 上传一个test.php文件,发现弹出窗口禁止php上传。如下图所示: ? 1. ...

89680
来自专栏信安之路

Android组件安全

组件是一个Android程序至关重要的构建模块。Android有四种不同的应用程序组件:Activity、Service、Content Provider和Br...

23020

扫码关注云+社区

领取腾讯云代金券