Nginx: 配置项之access模块、auth_basic模块、auth_request模块

news2024/11/15 11:06:09

access模块

  • 用于限定特定IP或者是网段进行访问的,从而实现Nginx的一个访问权限控制
  • 这个模块,它仅能够针对IP或者网段的一个访问

1 )指令集

1.1 allow

  • 语法结构: allow address | CIDR | UNIX | all
    • all 是放行所有
    • address 可以是 ip 地址,比如: 1.1.1.1; 还可以是网段 192.168.1.0/24 (子网掩码是24位的)
    • CIDR 和 UNIX 用的不多
  • 默认值: 无
  • 上下文: http、server、location、limit_except
  • 示例
    • allow 192.168.0.10; 只允许一个ip

1.2 deny

  • 语法结构: deny address | CIDR | UNIX | all
    • 这和 allow 完全一样
  • 默认值: 无
  • 上下文: http、server、location、limit_except
    • 也和 allow 完全一样
  • 示例
    • deny 192.168.0.0/24;

2 )组合示例

location / {
	deny 192.168.1.1; # 注意这个在下面一个allow的范围之内,要先写上
	allow 192.168.1.0/24; # 这个范围比上面 deny 的ip范围要大
	allow 10.1.1.0/16;
	allow 2001:0db8::/32; # ipv6的写法
	deny all; # 除了上面的放行,其余一律拒绝
}
  • 被拒绝的服务会显示 403

auth_basic模块

  • 它是限制特定用户访问的模块,对特定的URL来说,它必须通过提供的一个用户名或者密码来进行访问
  • 这在一些应用场景中是有用的,我们可能内部有一些系统针对不同的部门提供特定访问的时候
  • 我们可能针对某一个员工的用户名来进行访问
  • 这样一个模块,其实在这样一个应用场景中是很有效的

1 )基本功能

  • 基于HTTP Basic Authentication 协议进行用户名密码认证
  • 默认已编译进Nginx,通过 --without-http_auth_basic_module 禁用

2 ) 指令

2.1 auth_basic

  • 语法:auth_basic string | off;
    • 这里的 string 是提示框的信息
  • 默认值:auth_basic off;
  • 上下文:http、server、location、limit_except

2.2 auth_basic_user_file

  • 语法:auth_basic_user_file file;
    • 验证用户名和密码的文件,放在哪里
    • 下面会有如何生成这个密码文件
  • 默认值:-
  • 上下文:http、server、location、limit_except

3 )生成密码文件工具

  • 可执行程序: htpasswd
  • 所属软件包:httpd-tools
  • 生成新的密码文件:htpasswd -bc encrypt_pass jack 123456
    • -c 是第一次添加时,后续不需要
    • encrypt_pass 是文件名
  • 添加新用户密码:htpasswd -b encrypt_pass mike 123456
    • 再次执行,后面的用户名和密码会覆盖前面的

4 )配置示例

  • 查看是否安装 which htpasswd, 没有的话,下载后本地安装
  • 先安装依赖:$ yum install apr apr-util
  • $ rpm -ivh httpd-tools-2.4.6-90.el7.centos.x86_64.rpm 这个是本地已有的包
  • 安装成功后,查看里面有哪些文件 $ rpm -ql httpd-tools
    /usr/bin/ab
    /usr/bin/htdbm
    /usr/bin/htdigest
    /usr/bin/htpasswd
    /usr/bin/httxt2dbm
    /usr/bin/logresolve
    /usr/share/doc/httpd-tools-2.4.6
    /usr/share/doc/httpd-tools-2.4.6/LICENSE
    /usr/share/doc/httpd-tools-2.4.6/NOTICE
    /usr/share/man/man1/ab.1.gz
    /usr/share/man/man1/htdbm.1.gz
    /usr/share/man/man1/htdigest.1.gz
    /usr/share/man/man1/htpasswd.1.gz
    /usr/share/man/man1/httxt2dbm.1.gz
    /usr/share/man/man1/logresolve.1.gz
    
    • 可以看到,其中包含:/usr/bin/htpasswd
  • 现在我们来生成文件
    • $ cd /opt/nginx/
    • $ mkdir auth
    • $ cd auth
    • $ htpasswd -b -c encrypt_pass wang 123456
      Adding password for user jack
      
    • $ cat encrypt_pass 查看文件,生成一串秘钥,前面是 wang:$这里跟着一串秘钥
    • $ htpasswd -b encrypt_pass lee 654321
      • 这是第二次生成,并且是一个新用户
      • 这时候会出现两个用户,不会覆盖

现在开始进行配置

{
	location /bbs/ {
		auth_basic "test user pass";
		auth_basic_user_file /opt/nginx/auth/encrypt_pass; # 注意,这里最好是绝对路径,防止出错

		root html;
		index index.html;
	}
}
  • 要保证有 /opt/nginx/html/bbs/index.html 文件
  • 按照上述的配置,访问 / 不会有任何提示
  • 访问 /bbs 路径后会有如下提示
  • 输入用户密码后,就可以访问该页面
  • 再次刷新,也不会需要要求输入密码,浏览器已经帮你记住了

auth_request

  • 它也是一个访问控制的模块,在实际的生产环境的应用还是比较多的
  • 比如,基于安全的考虑,通常会有一些鉴权的服务器
  • 当你需要访问特定的应用模块的时候,首先需要去跟这些鉴权服务器发起请求
  • 鉴权服务器再对你鉴权通过以后,才能正常的去访问我们的业务系统

1 )功能和原理

  • 当它基于一个特定URI发起请求的时候,它会生成一个子请求
  • 这个子请求会是鉴权模块实现的一个能力
  • 这个鉴权模块,如果说对这个请求做完处理之后,会返回一个正常的HTTP的响应码
  • 它会根据 HTTP 响应码去做一定的访问控制, 比如,非 2xx 都认为是鉴权失败的
  • 参考如下图:

2 )启用和禁用

  • 默认并没有编译进 Nginx, 通过 --with-http_auth_request_module 启用

3 )指令

3.1 auth_request

  • 语法:auth_request uri | off;
  • 默认值:auth_request off;
  • 上下文:http、server、location

3.2 auth_request_set

  • 语法:auth_request_set $variable value;
  • 默认值:-
  • 上下文:http、server、location

4 ) 配置示例

location /private/ {
	auth_request /auth; # 类似于重定向
}

location /auth {
	proxy_pass http:/127.0.0.1:8080/verify; # 反向代理,这是一个鉴权服务,返回 2xx 则鉴权成功,才会再去访问 /private
	proxy_pass_request_body off;
	proxy_set_header Content-Length "";
	proxy_set_header X-Original-URI $request_uri;
}
  • 要请求 /private 的时候,会先发起对 /auth 的请求

5 ) 环境准备

  • 这里在服务器上调试一下, 准备一台服务器,Nginx 默认没有编译该模块, nginx -V 可查看到是否有该模块
  • 找到 nginx 的二进制文件删除 $ rm -rf nginx
  • 找到 configure 文件重新配置, 如下
    ./configure 
    	--prefix=/opt/nginx 
    	--conf-path=/opt/nginx/conf/nginx.conf 
    	--user=nginx
    	--group=nginx
    	--pid-path=/opt/nginx/pid/nginx.pid
    	--error-log-path=/opt/nginx/logs/error.log 
    	--with-pcre=/opt/source/pcre-8.43 
    	--with-zlib=/opt/source/zlib-1.2.11 
    	--with-http_ssl_module 
    	--with-http image_filter_module 
    	--with-http stub_status_module 
    	--http-log-path=/opt/nginx/logs/access.log 
    	--with-http_perl_module 
    	--with-http_auth_request_module
    
    • 最后一个是要加入的,前面的那么多,从 nginx -V 命令输出中可以拷贝
  • 检查完,没有问题,可以用 $ make 重新编译,
  • 之后,进行安装 $ make install

6 )配置测试

6.1 普通测试

server {
	listen 8080;
	charset utf-8;
	
	location /auth.html {
		return 200 "Success" # 这里模拟鉴权成功
		# return 403  "Failed, give the Page of Auth Server Success\n"; # 这里模拟错误的鉴权
	}
}
  • curl http://192.168.184.20:8080/auth.html 返回结果如下

    Success
    

    或者

    Failed, give the Page of Auth Server Success
    
  • curl curl http://192.168.184.20:8080/auth.html -I 返回

    HTTP/1.1 200 OK
    Server:nginx/1.12.2
    Date: Sat, 19 Oct 2019 14:51:24 GMT
    Content-Type: text/html; charset=utf-8
    Content-Length:44
    Connection: keep-alive
    

    或者

    HTTP/1.1 403 Forbidden
    Server:nginx/1.12.2
    Date: Sat, 19 Oct 2019 14:51:24 GMT
    Content-Type: text/html; charset=utf-8
    Content-Length:44
    Connection: keep-alive
    
  • 初步测试,正常

6.2 正式测试

server {
	listen 8080;
	charset utf-8;
	root html;
	
	location /OA/ {
		auth_request /auth;
		index index.html # 要保证有此文件, 只要鉴权成功,就会返回这个文件内容
	}
	
	location /auth {
		# 这里是模拟的鉴权接口,成功会返回 200, 失败返回 403
		# 如果鉴权失败,则会返回下面这个接口返回的错误信息
		proxy_pass  http://192.168.184.20:8080/auth.html; 
	}
}
  • 注意,替换真实鉴权的接口
  • 整个过程实现了一个鉴权服务器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2067720.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TCP的连接建立及报文段首部格式

粘包问题: 原因:TCP流式套接字;数据与数据之间没有边界;导致可能多次的数据粘到一起。 解决办法: 规定一些数据与数据之间的间隔符,如:"\aa\", "\r\n"。指定要发送的数据…

如何使用ssm实现游戏攻略网站的设计与实现+vue

TOC ssm052游戏攻略网站的设计与实现vue 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范…

探究短信里的短链接是如何实现的

简介 我们日常在收短信的时候,会经常发现,他们的短信里的跳转链接,都是非常短非常短的,这是为什么呢? 因为现在短信新规出来,是按字数收费的,而不是按条。比如腾讯云短信新规,70字…

原生js中的防抖节流笔记

防抖,单位时间内,频繁触发,只执行最后一次 效果演示 优化前,不断触发,浪费性能 优化后,只在指定时间内触发 演示代码 import debounce from "/node_modules/lodash-es/debounce.js"; const oBox docu…

专业养生调理保健传承者——五指生望京店开业送健康

2024年8月22日,即处暑时节,五指生望京店盛情开业!在这个暑意渐消的美好时节,望京店希冀为更多尊贵生命带来健康。 五指生成立于2001年,作为“全国五星级保健服务机构”,曾先后获得“首都文明单位”“北京市…

Java学习Day34:图书管理小项目

搭建过程 1.根据需求设计数据库 概念设计:使用ER图等工具设计数据库概念模型,明确实体、属性、关系。逻辑设计:将概念模型转换为数据库表结构,确定主键、外键、索引等。物理设计:根据数据库管理系统的特性进行物理存…

【运维】docker搭建portainer

1.拉取镜像 并 启动容器 1.1 拉取镜像 docker pull 6053537/portainer-ce1.2 启动容器 docker run -d --restartalways --name"portainer" -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock 6053537/portainer-ce2.访问地址 ip地址9000端口 密码&…

True XML cookbook

打开题目 看到登录口 随便输入admin&#xff0c;123456&#xff0c;然后抓包试一下 先按原来那道题的payload进行测试&#xff0c;payload和结果如下&#xff1a; <?xml version"1.0" ?> <!DOCTYPE llw [ <!ENTITY file SYSTEM "file:///flag&…

Linux驱动入门实验班——DAC模块驱动(附百问网视频链接)

目录 前言 一、 SPI数据结构 1.SPI设备驱动 2.SPI设备数据结构 二 、函数接口 1.spi_sync_transfer 2.spi_register_driver 三、DAC 1.数据格式 2.数据结构 四、源码 驱动 应用 课程链接 前言 在这里主要记录学习韦东山老师Linux驱动人入门实验班的笔记&#xff0…

计算机网络——HTTP与HTTPS协议

HTTP与HTTPS是应用层的协议。 目录 一、HTTP 二、HTTPS 三、HTTP与HTTPs对比 四、HTTP/1.0 HTT/1.1 HTTP/2有什么区别 五、HTTP常用请求方法&#xff1f;get/post区别&#xff1f; 六、HTTP的工作过程 七、HTTPS的工作过程 八、Cookie、Session、Token 一、HTTP 超…

【CAN总线测试】——CAN物理层测试

从0开始学习CANoe使用 从0开始学习车载测试 相信时间的力量 星光不负赶路者&#xff0c;时光不负有心人。 目录 1.最小通讯电压测试 2.最大通讯电压测试 3.显性位/隐性位输出电压测试 4.信号跳变沿测试 5.地偏移 6.终端电阻 1.7. CANH/CANL短路 1.8. CANH /GND短路 …

Verilog刷题笔记58

题目&#xff1a; Exams/2014 q3c 解题&#xff1a; module top_module (input clk,input [2:0] y,input x,output Y0,output z );parameter s03d000,s13d001,s23d010,s33d011,s43d100;always(*)begincase(y)s0:Y0x;s1:Y0~x;s2:Y0x;s3:Y0~x;s4:Y0~x;endcaseendassign z(y3b01…

Kafka运行机制(二):消息确认,消息日志的存储和回收,生产者消息分区

前置知识 Kafka基本概念https://blog.csdn.net/dxh9231028/article/details/141270920?spm1001.2014.3001.5501Kafka运行机制&#xff08;一&#xff09;&#xff1a;Kafka集群启动&#xff0c;controller选举&#xff0c;生产消费流程https://blog.csdn.net/dxh9231028/arti…

Verilog刷题笔记57

题目: Exams/2014 q3bfsm Given the state-assigned table shown below, implement the finite-state machine. Reset should reset the FSM to state 000. 解题&#xff1a; module top_module (input clk,input reset, // Synchronous resetinput x,output z );parameter…

ESP32-IDF 在 Ubuntu 下的配置

目录 一、安装准备二、获取 ESP-IDF三、设置工具四、使用案例 参考资料&#xff1a;官方文档&#xff1a;Linux 和 macOS 平台工具链的标准设置。 一、安装准备 参照官方文档&#xff0c;首先下载编译 ESP-IDF 所需要的软件包&#xff1a; sudo apt-get install git wget fl…

如何使用ssm实现基于Java的共享客栈管理系统

TOC ssm058基于Java的共享客栈管理系统jsp 第1章 绪论 1.1 课题背景 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。所以各…

一篇快速搞懂 JavaSE 高级特性(代码块,注解,枚举,异常处理,多线程,集合框架,泛型,反射,IO ......)

JavaSE 高级 一、面向对象&#xff08;高级&#xff09;1、单例模式&#xff08;Singleton&#xff09;2、代码块1&#xff09;静态代码块2&#xff09;非静态代码块 3、关键字 final4、抽象类与抽象方法&#xff08;abstract&#xff09;5、模板方法设计模式&#xff08;Templ…

利用GPT绘制流程图(无需下载任何软件

目录 什么是Flowchart Fun&#xff1f;如何利用GPT绘制流程图&#xff1f;步骤1&#xff1a;确定流程图的目的和内容步骤2&#xff1a;训练GPT编写流程图的文本描述步骤3&#xff1a;转换文本格式为可视化的流程图步骤4&#xff1a;调整和优化 结论小结&#xff1a; 什么是Flow…

SpringBoot【重修之HTTP协议】

request 请求&#xff0c;response 响应&#xff01; HTTP-协议的解析&#xff1a; 客户端&#xff1a;浏览器已经会自动解析了 服务端&#xff1a;通过Web服务器来解析&#xff01;【Tomcat , Jetty , WebLogic , WebSphere 】 Tomcat的研究学习 SpringBoot Web快速入门…

AIxBoard部署BLIP模型进行图文问答

一、AIxBoard简介 AIxBoard&#xff08;X板&#xff09;是一款IA架构的人工智能嵌入式开发板&#xff0c;体积小巧功能强大&#xff0c;可让您在图像分类、目标检测、分割和语音处理等应用中并行运行多个神经网络。它是一款面向专业创客、开发者的功能强大的小型计算机&#xf…