nginx提供了ngx_http_auth_basic_module 模块实现让用户只有输入正确的用户名密码才允许访问web内容。默认情况下,nginx 已经安装了该模块。我们只需要给配置一个用户名和密码的文件,就可以实现所需功能。
这里要用到一个加密工具htpasswd,它是包含在apache2-utils包中,如果web服务用的是apache2那么它默认是安装的,我们目前使用的web服务是nginx,所以需要安装这个工具包。在命令行中输入 htpasswd 系统会提示 这个软件是在 apache2-utils包中,我们安装

sudo apt install apache2-utils

利用 htpasswd设置 用户名和密码存放配置文件

htpasswd -c /etc/nginx/passwd test

输入上面这个 命令后,会提示我们输入两次密码,我们给用户test配置密码即可。完了,可以使用cat查看下我们创建的passwd文件,这个是包含用户名 和加密密码的一个文件。

修改nginx 的配置文件  server{}中添加 如下两行
#新增下面两行
   auth_basic "Please input password"; #这里是验证时的提示信息
   auth_basic_user_file /etc/nginx/passwd;

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    root /home/sinoll/htdocs;
    server_name domain.com;
    charset utf-8;
    auth_basic "Please input password"; ##这里是验证时的提示信息 
    auth_basic_user_file /etc/nginx/passwd;
    ssl on;
    ssl_certificate         /etc/letsencrypt/live/domain.com/fullchain.pem;
    ssl_certificate_key     /etc/letsencrypt/live/domain.com/privkey.pem;
    ssl_session_timeout 5m;
    location / {
        ## 开启目录浏览 #
        autoindex on;
        autoindex_exact_size off;      ## 显示文件大概大小, on 为 确切大小,单位是bytes #
        autoindex_localtime on;      ## 显示文件服务器时间, off 为GMT时间 #
        try_files $uri $uri/ =404;
    }
}


检查nginx配置文件并 重启 nginx 。

sudo nginx -t 
sudo service nginx restart

测试,如果输错密码的话,nginx会提示401错误,没有授权。这样我们希望的输入密码才能访问的功能就实现了。



如果我们的web服务器是 apache2的,那么就需要如此

开启.htaccess文件支持

sudo a2enmod rewrite

配置参考

<Directory   /home/www/movie>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

另外在 需要保护的文档目录下写上.htaccess文件 内容基本是


authname "please input username and password!"
authtype basic
authuserfile /etc/nginx/passwd
require valid-user


参考:
htpasswd命令是Apache的Web服务器内置工具,用于创建和更新储存用户名、域和用户基本认证的密码文件。
语法
htpasswd(选项)(参数)
选项

-c:创建一个加密文件;
-n:不更新加密文件,只将加密后的用户名密码显示在屏幕上;
-m:默认采用MD5算法对密码进行加密;
-d:采用CRYPT算法对密码进行加密;
-p:不对密码进行进行加密,即明文密码;
-s:采用SHA算法对密码进行加密;
-b:在命令行中一并输入用户名和密码而不是根据提示输入密码;
-D:删除指定的用户。

参数

    用户:要创建或者更新密码的用户名;
    密码:用户的新密码。

实例

利用htpasswd命令添加用户

htpasswd -bc .passwd www.linuxde.net php



在bin目录下生成一个.passwd文件,用户名www.linuxde.net,密码:php,默认采用MD5加密方式。

在原有密码文件中增加下一个用户

htpasswd -b .passwd Jack 123456



去掉-c选项,即可在第一个用户之后添加第二个用户,依此类推。

不更新密码文件,只显示加密后的用户名和密码

htpasswd -nb Jack 123456



不更新.passwd文件,只在屏幕上输出用户名和经过加密后的密码。

利用htpasswd命令删除用户名和密码

htpasswd -D .passwd Jack



利用htpasswd命令修改密码

htpasswd -D .passwd Jack
htpasswd -b .passwd Jack 123456



即先使用htpasswd删除命令删除指定用户,再利用htpasswd添加用户命令创建用户即可实现修改密码的功能。

htpasswd命令详细参考

参考地址 https://man.linuxde.net/htpasswd