当前位置: 首页 > news >正文

Nginx系列-8 allow与deny和error_page使用介绍

1.allow与deny介绍

allow和deny发生在access阶段,用于控制对资源的访问权限;allow表示允许访问,deny限制访问。
配置方式为:

#允许192.168.100.124访问
allow 192.168.100.124;#允许192.168.100.124/24地址段(192.168.100.0~192.168.100.255)访问
allow 192.168.100.124/24;#允许所有IP访问
allow all;

deny用法与allow完全相同。

说明: allow和deny针对于IP和IP段而言,不能配置域名。

2.案例介绍

一般,可以将allow/deny配置在http块、server块、location块中。
请求会按照优先级顺序自上而下进行匹配,匹配一个就中断。以下通过案例的方式进行介绍:
执行匹配的第一个:

server {listen 8001;server_name localhost;allow 192.168.0.1; #第1条deny 192.168.0.2;  #第2条allow 192.168.0.3; #第3条deny all;          #第4条allow 192.168.0.4; #第5条allow all;         #第6条# ...
}

当192.168.0.1访问时,匹配第1条,允许访问,即192.168.0.1可穿过access阶段;
当192.168.0.2访问时,匹配第2条,被拦截,返回403;
当192.168.0.3访问时,匹配第3条,允许访问,即192.168.0.3可穿过access阶段;
其他IP访问时,按照从上到下的顺序,匹配第4条,拒绝所有,返回403;
此时,第5条河第6条失效。

location块与server块的优先级:

server {listen 8001;server_name localhost;deny all;location /query {allow all;content_by_lua 'ngx.say("query")';}location /ask {content_by_lua 'ngx.say("ask")';}
}

测试结果如下:

[root@node52 conf]# curl http://localhost:8001/query
query[root@124 conf]# curl http://localhost:8001/ask
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>openresty/1.25.3.1</center>
</body>
</html>

当访问/query块时,由于location /query块中添加了allow all指令该指令优先级高于server块中定义的deny all, 匹配后,不再执行其他allow/deny指令,因此该请求穿过access阶段。
当访问/ask块时, 执行server块中定义的deny all指令,被拒绝访问,返回403。

3.error_page配置

error_page用于处理异常场景,可为不同的错误码配置不同的处理策略。error_page指令使用方式为error_page ${code} ${custom-code} ${url}, 案例如下:

error_page 500 501 502 =200 /50x.htmllocation = /50x.html {root html;
}

其中: code 表示匹配处理的异常,如需匹配多个异常类型,用空格分开,此时匹配500/501/502三种异常; custom-code 表示自定义HTTP响应码,此时返回给客户端的HTTP状态码为200; url为重定向的路径,此时重定向至/50x.html路径。
url可以使用相对路径,也可使用绝对路径,如:

error_page 500 501 502 =200 http://www.baidu.com

url可以用路径,也可使用具名location, 如下所示:

error_page 404 403 404 @jump_to_50x;location @jump_to_50x {return 404 'Not Found';
}

error_page指令可以在http块server块location块中使用,优先级越靠内越高,即location会覆盖server,server会覆盖http。如下所示:

http {  error_page 404 /global-404.html; # 全局配置  server {  listen 8080;server_name localhost;  error_page 404 /server-404.html; # server级别配置  location /foo {  error_page 404 /location-404.html; # location级别配置  }  location /bar {  # 这里没有为404定义error_page,所以会回退到server级别或全局级别  }  }  
}

当访问http://localhost:8080/bar时,返回 /server-404.html响应结果;/foo对应/location-404.html,其他路径对应/global-404.html。

相关文章:

  • 达梦数据库(一)mysql2dm
  • Nvidia Isaac Sim代码编程 入门教程 2024(7)
  • HarmonyOS根据官网写案列~ArkTs从简单地页面开始
  • Spring中的IOC详解
  • docker安装指导
  • 【Day12】登录认证、异常处理
  • 基于JAVA+SpringBoot+Vue+uniapp的微信小程序点餐平台
  • C++案例三:猜数字游戏
  • 【QT】窗口|菜单栏|菜单项|工具栏|状态栏|浮动窗口
  • 详解Redis源码中的设计模式及设计思想
  • 【Apache Doris】周FAQ集锦:第 15 期
  • pyspark使用 graphframes创建和查询图的方法
  • Maven settings.xml 私服上传和拉取配置
  • 有效应对服务器遭受CC攻击的策略与实践
  • 鸿蒙特色物联网实训室
  • [译] React v16.8: 含有Hooks的版本
  • 【附node操作实例】redis简明入门系列—字符串类型
  • CentOS从零开始部署Nodejs项目
  • Druid 在有赞的实践
  • HomeBrew常规使用教程
  • iOS小技巧之UIImagePickerController实现头像选择
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • JS专题之继承
  • nodejs调试方法
  • Python十分钟制作属于你自己的个性logo
  • Redis字符串类型内部编码剖析
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 从重复到重用
  • 我与Jetbrains的这些年
  • 学习HTTP相关知识笔记
  • 译自由幺半群
  • 白色的风信子
  • ​Spring Boot 分片上传文件
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (145)光线追踪距离场柔和阴影
  • (160)时序收敛--->(10)时序收敛十
  • (3)选择元素——(17)练习(Exercises)
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (LeetCode) T14. Longest Common Prefix
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (三分钟)速览传统边缘检测算子
  • (十七)Flink 容错机制
  • (十五)使用Nexus创建Maven私服
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)scrum常见工具列表
  • ***详解账号泄露:全球约1亿用户已泄露
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .net core 依赖注入的基本用发
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .net后端程序发布到nignx上,通过nginx访问
  • .NET周刊【7月第4期 2024-07-28】
  • ::before和::after 常见的用法
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @font-face 用字体画图标