Nginx location 基础使用、四层访问控制、账户认证及自定义日志路径(三)

简介: Nginx location 基础使用、四层访问控制、账户认证及自定义日志路径(三)

开发者学堂课程【Nginx 企业级 Web 服务实战:Nginx location 基础使用、四层访问控制、账户认证及自定义日志路径】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/649/detail/10757


Nginx location 基础使用、四层访问控制、账户认证及自定义日志路径(三)

四、Nginx 四层访问控制

1、nginx 有很多小功能,比如四层访问控制、用户认证等。四层访问控制可以让nginx 的某些路径禁止某些人访问,有一些比较重要的监控页面,不想让互联网的人访问,那么就可以通过 allow deny 设置一些禁止网络来禁止别人访问。

location /about {

alias /data/nginx/html/pc;

index index.html;

deny 192.168.1.1;

allow192.168.1.6/24;

allow 10.1.1.0/16;

allow 2001:edb8::/32;

deny all;  

}

比如这里 uri 比较重要,那就设置一个 deny ,后面还有 all,

就是先允许一个或者多个人来访问,后面只允许经过准许的人访问,第一个要 deny,先把这个人 deny 掉,不让他访问。

一个网站有多个地址,想把这一个地址当中的某个人去掉,那就只能先把这个网站当中的某个地址禁止,禁止完之后再把网站放进来,不让192.168.1.1这个访问,用户访问过来之后,先看是不是192.168,1.1,如果是的话就拒绝,如果不是那就走下面那个。然后再往下,把192.168.1.6/24放开,再往下把10.1.1.0/16放开,再往下其他人全拒绝,这个人再往前进去。

2、有个102的服务器,先允许这个服务器

location ~*\.(gif | jpg |jpeg | bmp| png | tiff | tif | ico| wmf | js) $ {

root /data/nginx/images1;

index index.html;

}

如果这个图片不让102访问,直接加 deny 就可以,deny 172.20.0. 102,直接拒绝,然后 reload,在 reload 之前应该可以访问到这个地址。

3、访问图片1.jpg,在102 上 curl 一下,现在是可以访问的。写 host 文件,编辑 etc ,hosts 加个本地解析,把 www.magedu.net 解析到172.20. 0.101,把这个域名加上去,之后再重新拷一下。只看头部信息就可以,这个是成功的,成功之后加上禁止202系统,再加上 allow 允许其他人,地址段可以再写个172.20.0.100,把45级再放开,放开之后,再把其他人全拒绝,也就是写个默认策略 deny all,把其他人全拒绝。

location ~*\.(gif | jpg |jpeg | bmp| png | tiff | tif | ico| wmf | js) $ {

root /data/nginx/images1;

index index.html;

deny 172.20.0.102;

allow 172.20.0.100;

deny all

}

这个结果就是把172.20.0.102这个地址拒绝了,拒绝之后再把172.20.0.100这个地址放开,放完之后再把其他所有人全拒绝。顺序可以自己写,这里只是演示一下。重新reload,reload 之后,这个172.20.0.102就访问不了了,它被拒绝了,被拒绝之后45级是可以访问的,其他人都访问不了,因为默认策略就是拒绝的。

4、在现实中 deny 172.20.0.102这种服务不会在这里设置,而是设置到 nginx 监控页面, allow 172.20.0.100后面可加码,比如这个后面是16位的。

公司里面一些特殊的地方才会用到这个,一般是 nginx 状态页,在状态页就会基于这个方式只允许本地访问,或者只允许内网的人来访问这个状态页,否则所有人都能拿到 nginx 状态,这个就不完全了。


五、Nginx用户认证

1、有些 uri 是公司内部的业务系统,这些业务系统可能本身没有提供登录认证的功能,也正好是基于 nginx 来做反向代理,这个时候就可以用 nginx 来实现这种反向代理。

比如后面有一个示例,日志收集 ELK 这个服务比较特殊,它本身没有提供认证的功能,只要知道这个地址的人都可以去访问,这个肯定是不安全的,所以在前面加个nginx,让 nginx 做反向代理,然后让 ELK 那些外部界面或者业务的外部系统监听在本地上,不能从外网访问。在这个服务器上再装个 nginx 做反向代理,让 nginx 去监听端口。当访问到这个服务器的80端口或者其他端口的时候,就转换到127.0.0.1这个业务的接端口上,然后在 nginx 上做认证,这样再访问这个业务系统,就必须做认证,否则就不能成功登录。

3、装一个工具,这个工具在 centos 上叫 httpd-tools,在 ubuntu 上叫 apache2-utils,这个名称是不一样的,装完之后就有 htp 这个命令了,再使用 htpasswd- bc生成一个认证文件,-m 可以不加,它是指定算法的,加-bc 就行了。

生成的认证文件可以通过 htpasswd-h 看一下,-c 创建个新文件,-b 指定密码,在命令行上输入密码,-m 使用 MD5 进行加密。-m 可以不加,它默认就是这个,所以就用 htpasswd- bc 创建一个认证文件,认证文件就放在 apps/nginx/conf 里。假如叫. htpasswd,后面给用户名和密码,这个密码就写123456

-bc /apps/nginx/conf/.htpasswd magedu 123456

创建好之后要验证一下这个文件里面有没有,它是使用 MD5 加密。复制粘贴一下,再写个用户名是 ubuntu

-b/apps/nginx/conf/.htpasswd ubuntu123456

这个就不用加 c 了,因为加c就把之前类似的覆盖了,这个时候就有两个账号了,一个 magedu一个ubuntu。

3、用 nginx 去调用这个认证文件,编辑一下配置文件

vim/apps/nginx/conf.d/inux39-pc.com

再写个 log in,假如是个医务系统,需要登录。写个 location 根下 log in,如果访问这个页面的时候,就要求去登录,写个 root,在 data 下的 nginx,再写个 html,在这里面创建一个 log in目录

location /login {

root /data/nginx/html;

index index.html;

}

这个录音的目录不登录是看不到的,也就相当于有些业务系统必须经过 nginx 认证以后才能通行,否则就被禁止了,不加 login 是可以访问的。把 log in 这个目录创建一下/data/nginx/html/login,然后 echo个值,这是一个 login 的 pages,把这个追加到刚才路径下的 index.html

echo“login pages”> ///data/nginx/html/log in/index.html  

因为下面是没有写任何东西的,所以它有空,有空就没关系。然后 reload,没有加认证的时候是可以直接访问的,但是如果加上就不能访问了。由于 location 比较重要,不允许别人看到,所以要加上认证 auth_basic, auth_basic_user_file,登录这个界面会有输入密码的提示。auth_basic_user_file 要指定一个认证文件,把这个放上就可以

location /login {

root /data/nginx/html;

index index.html;

auth_basic   “login password”

auth_basic_user_file apps/nginx/conf/.htpasswd

}

4、这个一般用于公司内部的一些小系统,真正给客户端或者互联网用户使用的不会用这种认证方式。因为这个账号名和密码得自己写,太低级了。这个认证没有自己的数据库认证,一般的业务系统都会有个数据库,把账号名和密码信息放到 MySQL 里面,会有认证的服务,至少要检查一下账号和密码是否正确,如果正确就允许登录,错误就拒绝。一般是这样的,这个只是用于公司内部的一些小系统

5、把认证文件的路径改一下。拿到 apps/nginx/conf/.htpasswd 这个认证文件,有的人喜欢把权限改成640,改成600也行,但是不改也没关系也能用。这次把它加上,加上后再刷新,刷新之后就不能登陆了,要是强制登陆就会报401,需要有个认证,所以还得登陆, magedu、ubuntu 这两个账号都可以登,这个认证比较简单,两个用户不能实现不同的权限,给不同用户分配不同权限的功能,得通过程序来实现,通过 MySQL 把这个权限读出来,读出来之后通过动态程序加载不同的页面,然后生成不同权限,这个得结合开发。但是 nginx 这个功能被用的次数还是比较多的,上课的时候放的歌就是 nginx 二次开发版来实现的,这是一个音乐播放网站,

image.png

比如上网搜野狼 disco,点下载,这个歌曲就可以下载了,这个是拿 Tengine 来做的。

相关实践学习
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
相关文章
|
1月前
|
Java 应用服务中间件 nginx
微服务框架(二十九)Logstash Nginx 日志上报
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文为Logstash Nginx 日志上报 本系列文章中所使用的框架版本为Spring Boot 2.0.3...
|
2月前
|
自然语言处理 前端开发 应用服务中间件
nginx的Location语法规则
nginx的Location语法规则
|
3月前
|
应用服务中间件 nginx
Nginx系列教程(07) - Location正则表达式
Nginx系列教程(07) - Location正则表达式
34 0
|
4月前
|
网络协议 应用服务中间件 nginx
nginx配置tcp协议代理的日志
nginx配置tcp协议代理的日志
101 0
|
29天前
|
负载均衡 应用服务中间件 nginx
【实践】使用Nginx作为GrayLog日志接入的负载均衡
【实践】使用Nginx作为GrayLog日志接入的负载均衡
14 0
|
29天前
|
存储 JSON 运维
【运维】Powershell 服务器系统管理信息总结(进程、线程、磁盘、内存、网络、CPU、持续运行时间、系统账户、日志事件)
【运维】Powershell 服务器系统管理信息总结(进程、线程、磁盘、内存、网络、CPU、持续运行时间、系统账户、日志事件)
25 0
|
30天前
|
监控 安全 前端开发
Nginx 访问日志中有 Get 别的网站的请求是什么原因?
Nginx 访问日志中有 Get 别的网站的请求是什么原因?
20 0
|
1月前
|
消息中间件 JSON 负载均衡
ELK7.x日志系统搭建 2. Nginx、Cluster等日志收集
ELK7.x日志系统搭建 2. Nginx、Cluster等日志收集
27 0
|
1月前
|
存储 监控 Ubuntu
日志切割工具-Logrotate实现nginx日志切割
日志切割工具-Logrotate实现nginx日志切割
18 0
|
1月前
|
应用服务中间件 nginx
nginx日志模块 ngx_http_log_module
nginx日志模块 ngx_http_log_module