在Nginx部署Web应用,如何保障后端API的安全

1. 使用HTTPS和http2.0

参考:Nginx配置HTTP2.0_nginx 支持 2.0-CSDN博客

2. 设置严格的CORS策略

通过add_header指令设置CORS头。

只允许来自https://frontend.yourdomain.com的请求访问API

location /api/ {if ($http_origin ~* (https://frontend\.yourdomain\.com)) {add_header 'Access-Control-Allow-Origin' $http_origin;add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';}if ($request_method = 'OPTIONS') {return 204;}proxy_pass http://backend;
}

3. 实现身份验证

对于JWT认证,后端服务负责生成和验证令牌,Nginx仅需检查令牌的存在性。为了实现这一点,可以在Nginx中添加一个自定义的Lua脚本(需要安装ngx_http_lua_module)或者直接在Nginx配置中进行简单的检查:

location /api/ {set $auth 0;if ($http_authorization ~ "^Bearer (.+)$") {set $auth 1;}if ($auth = 0) {return 401 "Missing or invalid Authorization header";}proxy_pass http://backend;
}

4. 限制IP地址

location /api/secure {allow 192.168.1.0/24;  # 允许的子网deny all;              # 拒绝其他所有proxy_pass http://backend;
}

5. 使用限流

防止滥用或DDoS攻击,使用limit_req模块来限制请求速率

http {limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;server {location /api/ {limit_req zone=one burst=5 nodelay;proxy_pass http://backend;}}
}

6. 实施WAF(Web应用防火墙)

安装ModSecurity并在Nginx中启用它:

# 安装ModSecurity
sudo apt-get install libmodsecurity3 modsecurity-crs# 启用ModSecurity
sudo nano /etc/nginx/modsec/modsecurity.conf-recommended

编辑/etc/nginx/sites-available/yourdomain,添加以下行以加载ModSecurity:

load_module modules/ngx_http_modsecurity_module.so;server {...modsecurity on;modsecurity_rules_file /etc/nginx/modsec/main.conf;...
}

创建或编辑规则文件/etc/nginx/modsec/main.conf以包含OWASP Core Rule Set或其他自定义规则。

7. 日志记录和监控

确保启用了适当的日志级别,并定期审查日志文件。也可以集成第三方监控工具如ELK Stack、Prometheus等。

http {log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;error_log /var/log/nginx/error.log warn;
}

8. 更新和维护

保持系统和软件包的更新是至关重要的。使用自动化的包管理器如APT(Debian/Ubuntu)或YUM(CentOS/RHEL)来定期更新

# 对于Debian/Ubuntu
sudo apt-get update && sudo apt-get upgrade -y# 对于CentOS/RHEL
sudo yum update -y

同时,可以订阅安全公告并及时应用补丁,考虑使用自动化工具如Ansible、Puppet或Chef来进行系统管理和配置部署。

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

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

相关文章

Nginx单向链表 ngx_list_t

目录 基本概述 数据结构 接口描述 具体实现 ngx_list_create ngx_list_init ngx_list_push 使用案例 整理自 nginx 1.9.2 源码 和 《深入理解 Nginx:模块开发与架构解析》 基本概述 Nginx 中的 ngx_list_t 是一个单向链表容器,链表中的每一个节…

es快速扫描

介绍 Elasticsearch简称es,一款开源的分布式全文检索引擎 可组建一套上百台的服务器集群,处理PB级别数据 可满足近实时的存储和检索 倒排索引 跟正排索引相对,正排索引是根据id进行索引,所以查询效率非常高,但是模糊…

软件需求建模方法

软件需求建模是一个涉及多个学科的领域,其研究方向广泛且多样。以下是一些主要的研究方向: 1. 需求工程方法:研究如何更有效地收集、分析、规格化和验证软件需求。这包括新的需求工程方法论和工具的开发。 2. 需求管理:关注需求…

软件项目需求分析的实践探索(1)

一、项目启动与规划 组建团队 包括项目经理、系统分析师、业务分析师以及可能涉及的最终用户代表和领域专家等。例如,开发一个医疗管理软件,就需要有医疗行业的专家参与,确保对医疗业务流程有深入理解。明确各成员的职责,如系统分…

wordpres当前分类调用父分类的名称和链接

在WordPress中&#xff0c;如果你想在当前分类页面调用并显示父分类的名称和链接&#xff0c;你可以使用以下代码片段&#xff1a; <?php // 获取当前分类的ID $cat_id get_queried_object_id();// 获取当前分类的父分类ID $parent_id get_term($cat_id, category)->…

前端Python应用指南(三)Django vs Flask:哪种框架适合构建你的下一个Web应用?

《写给前端的python应用指南》系列&#xff1a; &#xff08;一&#xff09;快速构建 Web 服务器 - Flask vs Node.js 对比&#xff08;二&#xff09;深入Flask&#xff1a;理解Flask的应用结构与模块化设计 在上一篇博文中&#xff0c;我们深入探讨了Flask框架&#xff0c;…

网络管理-期末项目(附源码)

环境&#xff1a;网络管理 主机资源监控系统项目搭建 &#xff08;保姆级教程 建议点赞 收藏&#xff09;_搭建网络版信息管理系统-CSDN博客 效果图 下面3个文件的项目目录(python3.8.8的虚拟环境) D:\py_siqintu\myproject5\Scripts\mytest.py D:\py_siqintu\myproject5\Sc…

MySQL 常用程序介绍

以下是一些常用的MySQL程序&#xff1a; 程序名作⽤mysqldMySQL的守护进程即 MySQL 服务器&#xff0c;要使⽤MySQL 服务器 mysqld必须正在运⾏状态mysql MySQL客⼾端程序&#xff0c;⽤于交互式输⼊ SQL 语句或以批处理模式从⽂件执⾏SQL的命令⾏⼯具 mysqlcheck⽤于检查、修…

Redis篇--常见问题篇4--大Key(Big Key,什么是大Key,影响及使用建议)

1、概述 大Key&#xff1a;通常是指值&#xff08;Value&#xff09;的长度非常大&#xff0c;实际上键&#xff08;Key&#xff09;长度很大也算。通常来说&#xff0c;键本身不会很长&#xff0c;占用的内存较少&#xff0c;因此判断一个键是否为bigKey主要看它对应的值的大…

云手机+YouTube:改变通信世界的划时代技术

随着科技的不断进步&#xff0c;手机作为人们生活中不可或缺的工具&#xff0c;也在不断地更新换代。近年来&#xff0c;一个名为“油管云手机”的全新产品正在引起广泛的关注和讨论。作为一个运用最新科技实现的新型手机&#xff0c;它在通信领域带来了全新的体验和革命性的变…

ModbusTCP从站转Profinet主站案例

一. 案例背景 在复杂的工业自动化场景中&#xff0c;企业常常会采用不同品牌的设备来构建生产系统。西门子SINAMICS G120变频器以其高性能、高精度的速度和转矩控制功能&#xff0c;在电机驱动领域应用广泛。施耐德M580可编程逻辑控制器则以强大的逻辑控制和数据处理能力著称&…

JS 函数的定义与调用

文章目录 1. 普通函数-无形参2. 普通函数-有形参3. 普通函数-参数默认值4. 普通函数-返回值5. 立即执行函数6. 匿名函数7. 箭头函数8. 函数提升 1. 普通函数-无形参 函数定义时没有指定形参, 调用时仍然可以向其传递参数, 通过默认参数 arguments 获取, arguments 是一个伪数组…

MySQL的索引失效的原因有那些

1. 数据类型不匹配 详细说明&#xff1a;MySQL在比较不同数据类型的值时&#xff0c;可能会尝试进行隐式转换。如果这种转换导致了复杂度增加或无法直接利用索引&#xff0c;则会导致索引失效。 实例与解决方案&#xff1a; -- 错误示例&#xff1a;数据类型不匹配 select *…

迈向未来:.NET技术的持续创新与发展前景

随着信息技术的飞速发展&#xff0c;编程语言和开发框架不断涌现&#xff0c;许多技术平台以其独特的优势赢得了开发者的青睐。在这场技术的竞争中&#xff0c;.NET平台凭借其卓越的性能、广泛的生态系统以及持续创新的精神&#xff0c;成为了全球开发者的重要选择。本文将探讨…

微信小程序-基于Vant Weapp UI 组件库的Area 省市区选择

Area 省市区选择&#xff0c;省市区选择组件通常与 弹出层 组件配合使用。 areaList 格式 areaList 为对象结构&#xff0c;包含 province_list、city_list、county_list 三个 key。 每项以地区码作为 key&#xff0c;省市区名字作为 value。地区码为 6 位数字&#xff0c;前两…

Canvas指定三角形内部生成随机点

使用重心坐标&#xff08;barycentric coordinates&#xff09;或者通过面积比例的方法来确定点是否在三角形内。不过&#xff0c;对于简单的应用&#xff0c;一种常见的方法是使用随机点并检查它们是否在三角形内部。如果不在&#xff0c;就重新生成&#xff0c;直到得到足够数…

智驾感知「大破局」!新一轮混战开启

随着智能驾驶搭载率的攀升&#xff0c;舱外传感器赛道迎来新变局。 一方面&#xff0c;从近几年智驾传感器的配置变化来看&#xff0c;摄像头的主导地位显而易见。 12月10-12日&#xff0c;由德赛西威总冠名的2024&#xff08;第八届&#xff09;高工智能汽车年会暨年度金球奖…

深入解析Android Recovery系统

深入解析Android Recovery系统 引言 在Android系统中,Recovery模式是一个非常重要的组成部分。它主要用于系统的恢复、更新和修复。当用户遇到系统问题时,Recovery模式可以提供一种安全的方式来恢复系统到正常状态。本文将深入探讨Android Recovery系统的实现原理,重点分析…

Kibana8.17.0在mac上的安装

1、Kibana是什么 Kibana是与elasticsearch配套使用的数据分析与可视化工具&#xff0c;通过Kibana可以轻松与es中存储的数据进行高效的交互&#xff0c;包括数据写入、检索、删除等操作&#xff0c;并可以通过编写部分代码将数据做成各种报表&#xff0c;从而进行非常直观的统…

数字IC后端设计实现十大精华主题分享

今天小编给大家分享下吾爱IC社区星球上周十大后端精华主题。 Q1:星主&#xff0c;请教个问题&#xff0c;长tree的时候发现这个scan的tree 的skew差不多400p&#xff0c;我高亮了整个tree的schematic&#xff0c;我在想是不是我在这一系列mux前边打断&#xff0c;设置ignore p…