前言
在公司前期投入研发时,尤其针对于ZF的客户,往往是很多需求含糊不清,可项目的里程碑节点已是板上定钉。在这种情况下,需求组应和研发组协同推敲,不断的制定计划、出demo,拿着我们推测出的构建想法及原型去征求客户的意见。
对于大屏、驾驶舱等可以前端先行的项目,往往不再是拿着高保真图片,而是部署到演示环境,将客户提供的真实数据展现于相关图表,数据可以使用前端mock数据,不用任何后端系统支撑。还有更low的是直接写死在图表上。用这个服务做演示汇报。这种情况下,有些驾驶舱、大屏的数据就涉及到敏感问题。演示的环境基本都是http://xxx.xxxx.xxx/xxxx ,针对于大屏并没有去配置用户权限控制,甚至这个时候后台的鉴权服务还没有搭建起来,还在属于设计的阶段,对于内网部署的还好去解释不做用户的鉴权。如果客户要求放在外网上,只要是拿到了url地址,任何人都可以访问。在前后台都不愿意去写一套登录代码认证的情况下,0代码完成用户认证,可以考虑使用Nginx的 auth_basic 。
个人经历
客户第二天需要验收大屏页面,加班到晚上9点刚把前端的包部署完准备下班,突然领导要求访问的大屏页面地址加个用户名登录,这样数据放在互联网上谁都可以访问查看,太危险,造成数据泄露。起初想法是让前端去实现,尽快搞完下班,但是前端组有别的任务,压力给到我这边。后来想到了nginx的负载均衡,应该是可以做到,查了相关资料,半小时搞定。记录下文章,给日后也有相关需求的项目团队提供帮助。
auth_basic 配置步骤
1.生成密码(Linux)
Nginx绝大部分公司使用的目的还是作为一个负载均衡的功能,当然Nginx里还提供了其它的一些作用。今天一起来学习下Nginx的 Auth_basic 鉴权。
Nginx下载、安装、启动这种弱智般的操作流程不再多写。要是不会建议转行哈。
ngx_http_auth_basic_module模块允许通过使用“HTTP基本认证”协议验证用户名和密码来限制对资源的访问。 大致的过程就是在nginx下生成一个用户密码的配置文件,而后在conf配置文件中配置一下就OK了。
访问还可以根据地址、子请求的结果或JWT进行限制。同时通过地址和密码限制访问由满足指令控制。
同时,auth_basic要求放置的用户文件需要进行hash值计算,要对明文密码进行处理。用户文件后面说明。
注:加密处理只针对Linux服务器,Windows server不需要加密后的用户文件,不需要。不需要!!!只需要将明文用户密码作为一个文件就可以,网上没有对windows server的文件解释,自己摸索了半天才发现。
yum install httpd-tools -y
确定服务器是否安装了 http,而后生成用户名密码
htpasswd -nbm admin 12345678
使用了如上命令后,会生成加密后的hash值,大概是如下的样子
admin:$apr1$nkxLxBPa$EGa.u5yKuQ08m6g/8bGb9.
创建一个文件,不要有后缀的,将生成的用户密码贴进来。如果是多个用户,换行贴入就可以。文件可命名为auth_basic_user_file。放在可以找到的位置路径上。
2.配置
location / {
root html;
index index.html index.htm;
# 开启功能模块,关闭为off
auth_basic on;
# 指定密码配置文件
auth_basic_user_file home/web/auth/auth_basic_user_file;
# 验证通过后 跳转的相关路径
proxy_pass http://127.0.0.1:9003;
}
代码解读
nginx监听指定端口,用户访问指定的端口后,跳出验证用户密码,auth_basic on 代表打开验证登录,输入的用户密码要在生成的用户信息文件里可以匹配的上,完成验证后,跳转到9003端口的页面上。
业务思路
我这边的服务器是window server,我认为Linux也一样可以参考,首先将服务器的9003号端口也就是我的大屏部署的端口进站关掉,这样即便项目部署成功去访问9003是访问不进来的,只能通过访问我的ngxin监听的端口。如果访问我的nginx监听端口,则跳转出登录,登录成功后内部自己跳转到9003。如下图
访问9007验证登录,输入配置的南京发改委账号信息,验证成功后显示大屏:
0代码完成用户的登录。
/* powerd by zym */
0 error(s),0 warning(s)