在nginx使用过程中,搭建了很多个站点,但是其中,有些站点不想被其他人访问,因此我们可以在nginx中为全部站点或某个站点设置访问权限认证,只有输入自己设置的正确的用户名与密码才可正常访问;
在 nginx 下,提供了 ngx_http_auth_basic_module 模块实现让用户只有输入正确的用户名密码才允许访问web内容。默认情况下,nginx 已经安装了该模块。所以整体的一个过程就是先用第三方工具( htpasswd,或者使用 openssl)设置用户名、密码(其中密码已经加过密),然后保存到文件中,接着在 nginx 配置文件中根据之前事先保存的文件开启访问验证。
一.htpasswd
1.安装htpasswd工具:
[root@IMS_Qnginx ~]# yum install -y httpd-tools
2.设置htpasswd用户名和密码,并把用户名、密码保存到指定文件中:
(1).新建密码目录:
[root@IMS_Qnginx ~]# mkdir -p /usr/local/src/nginx/
(2).设置用户名与密码:
[root@IMS_Qnginx ~]# htpasswd -c /usr/local/src/nginx/passwd admin
注:admin为用户名,htpasswd -c /usr/local/src/nginx/passwd admin :为用户名为admin的设置密码
(3).查看设置的用户名与密码:
cat /usr/local/src/nginx/passwd
3、修改 nginx 配置文件,为站点增加安全验证:
(1).为全局站点设置安全验证:
(2).为某个站点新增安全认证:
4、重启nginx服务,让安全认证生效:
[root@master ~]# ./nginx -s reload
以上都配置无误后,你重新访问你的站点,如果出现需要身份验证的弹窗就说明修改成功了。
接下来补充以一下我们的htpasswd命令:
htpasswd命令: | |
---|---|
-c | 创建加密文件; |
-n | 不更新加密文件,只将加密的用户密码显示在屏幕上; |
-m | 默认采用MD5算法进行加密; |
-d | 采用 CRYPT 算法对密码进行加密 |
-p | 不对密码进行加密 ,即明文密码; |
-s | 采用 SHA算法对密码进行加密 |
-b | 在命令行中一并输入用户名和密码而不是根据提示输入密码。 |
-D | 删除指定的用户 |
创建密码文件并且添加用户,
htpasswd -c -b 文件名 用户名 密码
添加用户不创建文件
htpasswd -b 用户名 密码
删除用户和密码
htpasswd -D 文件名 用户名
修改密码 :
就是删除用户然后创建用户
htpasswd -D 文件名 用户名
htpasswd -b 用户名 密码
二.OpenSSL
步骤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: a p r 1 apr1 apr1wI1/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密码验证
- 现在我们有一个文件,其中的用户和密码是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以实施您的密码策略:
[root@master ~]# ./nginx -s reload
以上就是我们的nginx用户认证配置的一些基本讲解