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

 步骤1:创建保存用户名和密码的文件

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

      1. 使用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 

Output

 

sammy:$apr1$wI1/T0nB$jEKuTJHkTOOWkopnXqC1d1  

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

       尽管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 

        

 步骤2:配置Nginx密码验证

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

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

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

要设置身份验证,您需要决定要限制的上下文。在其他选择中,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