一、问题描述
目前我们配置的网站内容都是没有限制,可以让任何人打开浏览器都能够访问,这样就会存在一个问题(可能会存在一些恶意访问的用户进行恶意操作,直接访问到我们的敏感后台路径进行操作,风险就会很大);并且我们也只是希望这个网站只有我们自己能够访问,其他人访问不了。
二、问题分析
1、我们的网站目前能够让任何人都打开浏览器访问;
2、只是希望这个网站只有我们自己能够访问,其他人访问不了;
根据分析出的的问题其实是需要给在nginx上部署的指定网站开启basic认证即可实现。
三、实现方法
3.1、生成htpasswd的账号密码文件
3.1.1、通过在线的htpasswd网站生成
可以直接在浏览器中输入【htpasswd在线】即可查询到,也可以使用我这里提供的这2个
在线 htpasswd 生成器OSCHINA.NET在线工具,ostools为开发设计人员提供在线工具,提供jsbin在线 CSS、JS 调试,在线 Java API文档,在线 PHP API文档,在线 Node.js API文档,Less CSS编译器,MarkDown编译器等其他在线工具https://tool.oschina.net/htpasswd在线htpasswd生成器在线htpasswd生成工具,在线nginx htpasswd生成https://www.lddgo.net/encrypt/htpasswd
使用在线生成器获取到生成结果后复制该结果,然后在到指定路径下创建一个文件然后将结果粘贴上去就行。
# 1、进入需要放置basic用户和密码文件的路径(没有指定路径的话需要使用mkdir nginx命令创建)
mkdir -p /opt/nginx/basicauth/
cd /opt/nginx/basicauth/
# 2、直接在/opt/nginx/basicauth/路径下创建一个名为用户名b.coffeemilk.com.htpasswd的basic文件,然后将我们在在线网站设置用户为coffeemilk,密码为123456的结果粘贴到b.coffeemilk.com.htpasswd文件即可
touch b.coffeemilk.com.htpasswd
vi b.coffeemilk.com.htpasswd
3.1.2、安装htpasswd工具在本机生成
# 安装htpasswd工具命令
yum install httpd-tools -y
# 查看htpasswd的用法命令
htpasswd --help
序号 | 参数 | 参数说明 |
1 | -c | 创建一个新文件 |
2 | -n | 不更新文件;只是在屏幕上显示文件内容 |
3 | -b | 直接在命令行中输入密码,而不是提示后再输入密码 |
4 | -i | 不用验证即可直接从输入流中读取到密码内容(只要是方便脚本使用) |
5 | -m | 强制对密码进行MD5加密(默认) |
6 | -2 | 强制对密码进行SHA-256哈希加密(安全) |
7 | -5 | 强制对密码进行SHA-512哈希加密(安全) |
8 | -B | 强制对密码进行bcrypt加密(非常安全) |
9 | -C | 设置用于bcrypt算法的计算时间 (越高越安全,但速度越慢,默认值:5,有效值:4到31) |
10 | -r | 设置用于SHA-256、SHA-512算法的轮数 (越高越安全,但速度越慢,默认值:5000) |
11 | -d | 强制对密码进行CRYPT加密(最多8个字符,不安全) |
12 | -s | 强制对密码进行SHA-1加密(不安全) |
13 | -p | 不对密码进行加密(明文,不安全) |
14 | -D | 删除指定的用户 |
15 | -v | 验证指定用户的密码 |
在Windows和NetWare以外的其他系统上,“-p”标志可能不起作用;SHA-1算法不使用盐,其安全性不如MD5算法 |
# 1、进入需要放置basic用户和密码文件的路径(没有指定路径的话需要使用mkdir nginx命令创建)
mkdir -p /opt/nginx/basicauth/
cd /opt/nginx/basicauth/
# 2、直接在/opt/nginx/basicauth/路径下创建用户名为coffeemilk的basic用户名和密码文件命令
htpasswd -c ./a.coffeemilk.com.htpasswd coffeemilk
# 在当前目录下生成一个b.coffeemilk.com.htpasswd文件,用户名coffeemilk,密码123456789,默认采用MD5加密方式
htpasswd -bc ./b.coffeemilk.com.htpasswd coffeemilk 123456789
# 在当前目录下生成一个b.coffeemilk.com.htpasswd文件,用户名coffeemilk,密码123456789,指定采用bcrypt加密方式
htpasswd -Bbc ./b.coffeemilk.com.htpasswd coffeemilk 123456789
# 在原有密码文件中增加下一个用户
htpasswd -b ./b.coffeemilk.com.htpasswd test 123456
# 删除指定路径下basic文件内的指定用户(比如删除/opt/nginx/basicauth路径下的这个b.coffeemilk.com.htpasswd的basic文件里面的test用户)
htpasswd -D /opt/nginx/basicauth/b.coffeemilk.com.htpasswd test
3.2、给需要配置的网站设置basic认证
实现将Nginx的每个网站配置单独的nginx配置文件——每个网站单独管理https://blog.csdn.net/xiaochenXIHUA/article/details/140416476?spm=1001.2014.3001.5501进入我们每个网站单独的nginx配置文件修改需要设置basic内容的网站文件即可修改内容如下:
# 进入每个网站对应的单独nginx配置文件路径命令
cd /etc/nginx/conf.d
# 编辑指定的网站需要配置basic的nginx配置文件(比如给b.coffeemilk.com网站单独的nginx配置文件b.coffeemilk.com.conf进行编辑)命令
vi b.coffeemilk.com.conf
#auth_basic表示开启这个功能,"b.coffeemilk.com"是备注信息,随便写,一些老浏览器能看到,新浏览器都看不到备注信息了。
auth_basic "b.coffeemilk.com";
# 这是basic账号密码文件存放的位置
auth_basic_user_file /opt/nginx/basicauth/b.coffeemilk.com.htpasswd;
3.3、检查配置的Nginx内容是否正确和重启Nginx服务
nginx -t
systemctl restart nginx
3.4、验证basic的效果
在浏览器输入自己已经设置了basic认证的网站(比如我这里的是http://b.coffeemilk.com/),打开该网站后无法直接看到网站内容会直接有一个输入账号密码的弹窗,输入正确后才能够看到网站内容表示成功了,如下图所示: