使用Nginx配置文件屏蔽指定请求
2023-03-14 22:34:26 时间
由于工作需要,有几个nginx配置的需求,在这里整理记录一下。
1. 屏蔽请求方式,仅允许POST、GET等
当有非我们允许的请求方式访问站点时,定义返回403状态码,示例配置如下:
if ($request_method !~ ^(GET|POST)$ )
{
return 403;
}
2. 定义错误页
有时候我们访问到不存在的页面或报错,如403/404/502/503/504/405等,再或者500这种程序错误时,出于安全和用户友好度的考虑,希望能够跳转到统一的错误页等。可以添加如下示例配置:
error_page 404 403 502 503 /error.html
location = /error.html {
root html;
}
这里前提是要自己写好一个错误页面,放到指定的nginx服务器目录里。
3. 屏蔽指定url
比如一台nginx提供的多个server_name共用静态资源时,但又有资源仅仅想让某个server_name访问到;又比如程序写的不够合理,当生产环境跑起来时发现有些地址不应该提供到互联网访问;再或者我们想通过nginx屏蔽掉一些恶意的访问如特殊字符,都可以使用下面示例配置进行指定url的屏蔽跳转到错误页:
if ( $request_uri ~* "..;|test1234|home/test.do" ){
rewrite xxxxxxxxx; #或return指定错误码
}
作用域可以是server,也可以是location。上面写法使用正则匹配包含以上字符串的url,根据使用场景调整,转义使用,多个字符串之间用|分隔。
4. 屏蔽指定IP地址
比如我们的服务部署后只想指定IP地址可以访问或指定的IP不可访问时,可以使用下面示例配置强制跳转到错误页面。
if ($http_x_forwarded_for !~ ^(192.168.3.100|123.123.123.123|222.222.222.222)) {
return 403; #或 rewrite指定页面
}
作用域可以是server,也可以是location。
5. 比较奇葩的需求
我这里有一个服务test对互联网开放访问,但是其中比如地址 /test/admin.jsp 和 /test/config.jsp 又只想让指定的几个人访问到其他人不允许访问,这里我将上面的3和4组合起来使用了,配置示例如下:
location /test {
set $flag 0;
if ( $request_uri ~* "admin.jsp|config.jsp" ) {
set $flag "${flag}1";
}
if ($http_x_forwarded_for !~ ^(192.168.3.100|123.123.123.123|222.222.222.222)) {
set $flag "${flag}2";
}
if ( $flag = "012" ){
return 403;
}
proxy_pass xxxxxxxxxxxxxxxxx;
proxy_set_header xxxxxxxxxxxxxxx;
.......................
}
本来想if如果是真的话flag=flag+1, 不过随手写了写,发现写不对,就换这种比较熟悉的字符串拼接的方式了,殊途同归;
flag初始为1,如果访问到指定的url则会变成01, 如果访问到url的却又不是我们白名单允许的IP,flag会变成012,最后对flag做下判断如过时“012”则拒绝访问。
写在最后:
如有错误请评论告知,多多包涵。
欢迎关注我的订阅号,谢谢
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的