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