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错误,没有授权。这样我们希望的输入密码才能访问的功能就实现了。

如果后面需要修改密码或者增删用户,可以详细参考htpasswd命令的详细用法。参考地址 https://man.linuxde.net/htpasswd