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


    介绍

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

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

    先决条件

    要开始使用,您需要访问 Ubuntu 服务器环境。您将需要具有特权的非 root 用户sudo才能执行管理任务。

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

    sudo apt-get update
    sudo apt-get install nginx
    
    • 1
    • 2

    创建密码文件

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

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

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

    您可以使用此命令将用户名添加到文件中。我们将demo其用作我们的用户名,但您可以使用任何您喜欢的名称:

    sudo sh -c "echo -n 'demo:' >> /etc/nginx/.htpasswd"
    
    • 1

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

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

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

    cat /etc/nginx/.htpasswd
    
    • 1

    输出如下:

    sammy:$apr1$wI1/T0nB$jEKuTJHkTOOWkopnXqC1d1
    
    • 1

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

    虽然 OpenSSL 可以为 Nginx 身份验证加密密码,但许多用户发现使用专门构建的实用程序更容易。包中的htpasswd实用程序apache2-utils很好地提供了此功能。

    通过键入以下命令在您的服务器上安装apache2-utils软件包:

    sudo apt-get update
    sudo apt-get install apache2-utils
    
    • 1
    • 2

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

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

    sudo htpasswd -c /etc/nginx/.htpasswd demo
    
    • 1

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

    省略-c您希望添加的任何其他用户的参数:

    sudo htpasswd /etc/nginx/.htpasswd another_user
    
    • 1

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

    cat /etc/nginx/.htpasswd
    
    • 1

    输出如下

    demo:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
    another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.
    
    • 1
    • 2

    配置 Nginx 密码认证

    现在我们有了一个包含 Nginx 可以读取格式的用户和密码的文件,我们需要配置 Nginx 以在提供受保护的内容之前检查该文件。

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

    sudo nano /etc/nginx/sites-enabled/default
    
    • 1

    在内部,去掉注释后,该文件应类似于以下内容:

    /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;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    要设置身份验证,您需要决定要限制的上下文。在其他选择中,Nginx 允许您在服务器级别或特定位置内设置限制。在我们的示例中,我们将使用位置块限制整个文档根目录,但您可以修改此列表以仅针对 Web 空间中的特定目录:

    在此位置块中,使用该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;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

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

    sudo service nginx restart
    
    • 1

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

    确认密码认证

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

    image-20220720143512291

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

    Nginx 未经授权的错误

    结论

    您现在应该拥有为您的站点设置基本身份验证所需的一切。请记住,密码保护应该与 SSL 加密相结合,这样您的凭据就不会以纯文本形式发送到服务器。

  • 相关阅读:
    Oracle基础知识和常用操作
    iceberg-flink 七:累积窗口使用。(CUMULATE)
    [附源码]计算机毕业设计springboot物业管理系统
    git-secret:在 Git 存储库中加密和存储密钥(下)
    贪心算法之最优装载问题
    FL Studio21.2.8中文版水果音乐制作的革新之旅!
    关于CSS 中权重的教程
    Java线程发生IO阻塞时的线程状态
    辉视智慧监狱电教系统,推动现代化文明监狱构建进程
    LeetCode每日一题(188. Best Time to Buy and Sell Stock IV)
  • 原文地址:https://blog.csdn.net/hjue/article/details/125891839