浅谈 Nginx 头部配置:add_header 及其常见功能实践

Nginx 是一个高性能的 HTTP 和反向代理服务器,广泛应用于互联网应用中。除了其出色的性能和稳定性,Nginx 还提供了丰富的配置选项,使得开发者和系统管理员能够灵活地控制服务器的行为。其中,add_header 指令是一个非常实用的配置项,用于在 HTTP 响应中添加自定义头部信息。本文将详细介绍 add_header 指令及其能实现的功能。

什么是 add_header?

add_header 是 Nginx 配置文件中的一个指令,用于在 HTTP 响应头中添加新的头部信息。该指令可以在不同的上下文中使用,包括 http、server、location 和 if 块中。通过 add_header,你可以控制客户端浏览器的行为,增强安全性,提供额外的信息等。

add_header 的基本语法

add_header 指令的基本语法如下:

Nginx
add_header name value [always];

name :要添加的头部名称。

value :头部的值。

always :可选参数,如果指定,即使响应代码不是 200(例如 404 或 500),也会添加该头部。

add_header 的实际应用场景

1、安全性增强

Content Security Policy (CSP)

CSP 是一种安全机制,用于防止跨站脚本攻击(XSS)和其他代码注入攻击。通过 add_header,可以设置 CSP 头部,限制页面可以加载的资源。

  • 第一行主要用于防止点击劫持攻击,限制哪些页面可以嵌入当前页面

  • 第二行主要用于控制哪些来源的对象可以被加载,可以控制为当前域名或指定地址

Nginx
add_header Content-Security-Policy "frame-ancestors 'self';";
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self';";
#default-src 'self':默认源为当前域名。
#script-src 'self' 'unsafe-inline' 'unsafe-eval':允许来自当前域名的脚本,以及内联脚本和 eval。
#style-src 'self' 'unsafe-inline':允许来自当前域名的样式,以及内联样式。
#img-src 'self' data::允许来自当前域名的图片和数据 URI。

在跨域请求时只发送源信息(不包含路径),在同域请求时发送完整 URL

Nginx
add_header Referrer-Policy "strict-origin-when-cross-origin";

X-XSS-Protection

启用 XSS 过滤,并在检测到攻击时阻塞页面。

Nginx
add_header X-XSS-Protection "1; mode=block";

X-Content-Type-Options

此头部指示浏览器严格遵循响应中的 Content-Type 头部,防止 MIME 类型嗅探。

Nginx
add_header X-Content-Type-Options nosniff;

X-Frame-Options

此头部用于防止点击劫持攻击,限制页面能否被嵌入到 <frame>、<iframe> 或 <object> 中。

Nginx
#不允许任何框架嵌入
add_header X-Frame-Options DENY;
#允许同源框架嵌入
add_header X-Frame-Options SAMEORIGIN;

Strict-Transport-Security (HSTS)

此头部强制浏览器使用 HTTPS 访问网站,提高安全性。

Nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

2、性能优化

Cache-Control

此头部用于控制缓存行为,告诉浏览器和中间代理如何缓存资源。

Nginx
add_header Cache-Control "public, max-age=31536000";

3、API控制

Access-Control-Allow-Origin

Nginx
add_header Access-Control-Allow-Origin "*";

Access-Control-Allow-Methods

Nginx
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";

Access-Control-Allow-Headers

Nginx
add_header Access-Control-Allow-Headers "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type";

注意事项

性能影响:虽然 add_header 本身对性能的影响很小,但过多的头部信息可能会增加响应的大小,影响传输效率。

兼容性:确保添加的头部信息不会与现有的安全策略或客户端行为冲突。

测试:在生产环境中使用新的头部信息之前,建议在开发或测试环境中进行充分测试。

结论

add_header 指令是 Nginx 配置中一个强大且灵活的工具,可以帮助你增强网站的安全性、优化性能、传递信息等。通过合理使用 add_header,你可以更好地控制 HTTP 响应,提升用户体验和安全性。


若想解锁更多内容,可点击inBuilder社区,免费下载安装 inBuilder开源社区版!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MSYS2+GCC 安装与应用保姆手册

msys2 提供可在Windows下使用 GCC 编译器&#xff1b;并且&#xff0c;借助 Linux 包管理功能&#xff0c;可轻松下载丰富的可在Windows下直接使用的 C/C 开发包&#xff0c;包括编译好的二进制包。 网络库asio、准标准库boost、zip解压缩、json格式处理、引擎 SDL……十八般兵…

图片美化SDK解决方案,赋能H5与小程序极致体验

无论是社交媒体分享、电商产品展示&#xff0c;还是个人日常生活的记录&#xff0c;一张经过精心美化的图片总能瞬间吸引眼球&#xff0c;传递出更加丰富和动人的信息。如何在不增加应用体积、不牺牲用户体验的前提下&#xff0c;为H5页面和小程序提供媲美原生APP的图片美化功能…

前端高频面试题2024/9/22(偏项目问题--通用后台管理系统)

文章目录 一.前端项目概述1.系统登录注册模块1.对注册的密码进行加密 &#xff08;使用加密中间件bcrypt.js&#xff09;2.登录成功后返回token3.前端登录页面有用到弹性布局&#xff0c;ref和reactive4.登录头像&#xff1a;文件上传 2.系统设置模块2.系统首页模块&#xff08…

Unity 从零开始的框架搭建1-2 事件的发布-订阅-取消的小优化及调用对象方法总结[半干货]

该文章专栏是向QFrameWork作者凉鞋老师学习总结得来&#xff0c;吃水不忘打井人&#xff0c;不胜感激 Unity 从零开始的框架搭建1-1 unity中对象调用的三种方式的优缺点分析【干货】-CSDN博客 原来 其实就是对上一节的事件发布订阅类的小优化&#xff0c;原来是这样子的 p…

【SEO】什么是SEO?

什么是SEO&#xff08;搜索引擎优化&#xff09;&#xff1f;为什么SEO对于⼀个⽹站⾄关重要&#xff1f; SEO 全称是搜索引擎优化&#xff08;Search Engine Optimization&#xff09; 因为我们目前开发的网址&#xff0c;需要人看到&#xff0c;除了通过宣传营销的方式展现…

计算机毕业设计 校内跑腿业务系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

Qt操作主/从视图及XML——实例:汽车管理系统

目录 1. 主界面布局2.连接数据库3.主/从视图应用 1. 主界面布局 先创建一个QMainwindow&#xff0c;不带设计界面 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QGroupBox> #include <QTableView> #include <QListWidg…

【环境搭建】MAC M1安装ElasticSearch

STEP1 官网下载ES Download Elasticsearch | Elastic&#xff0c;下载mac m1对应版本的es STEP2 进入bin文件夹&#xff0c;执行./elasticSearch 浏览器输入 127.0.0.1:9200 STEP 3 下载对应Kibana版本&#xff0c;Download Kibana Free | Get Started Now | Elastic 出现报错…

Linux驱动开发(速记版)--单总线

第124章 单总线简介 124.1 单总线概述 单总线是一种串行通信协议&#xff0c;由Dallas Semiconductor开发&#xff0c;特点是用一根信号线实现双向数据传输和时钟同步&#xff0c;节省IO口且结构简单。 它广泛应用于传感器、存储器等。 硬件包括信号线、上拉电阻、设备和处理器…

高亚科技助力优巨新材,打造高效数字化研发项目管理平台

近日&#xff0c;中国企业管理软件资深服务商高亚科技与广东优巨先进新材料股份有限公司&#xff08;以下简称“优巨新材”&#xff09;正式签署合作协议&#xff0c;共同推进产品研发管理数字化升级。此次合作的主要目标是通过8Manage PM项目管理系统&#xff0c;提升优巨新材…

现货黄金价格走势图策略分析 先看“势”

在现货黄金投资市场&#xff0c;对金价走势图的趋势进行分析&#xff0c;是投资者做出明智决策的关键步骤。通过有效的趋势分析&#xff0c;投资者可以更好地预测市场的走向&#xff0c;从而制定相应的交易策略。本文将详细介绍如何分析金价的趋势&#xff0c;并探讨这种分析方…

QStandardItemModel的role

QStandardItemModel定义了一些标准的角色&#xff0c;而QAbstractItemModel允许自定义角色。以下是一些常见的数据角色&#xff1a;1. **Qt::DisplayRole**&#xff1a;这是最基本的角色&#xff0c;用于显示在视图中的文本。当一个单元格被绘制时&#xff0c;通常会查询这个角…

鸿蒙next开发者第一课02.DevEcoStudio的使用-习题

【习题】DevEco Studio的使用 通过/及格分80/ 满分100 判断题 1. 如果代码中涉及到一些网络、数据库、传感器等功能的开发&#xff0c;均可使用预览器进行预览。F 正确(True)错误(False) 预览器不能进行传感器等特殊功能的开发,需要使用真机开发 2. module.json5文件中的…

【大模型理论篇】精简循环序列模型(minGRU/minLSTM)性能堪比Transformer以及对循环神经网络的回顾

1. 语言模型之精简RNN结构 近期关注到&#xff0c;Yoshua Bengio发布了一篇论文《Were RNNs All We Needed?》&#xff0c;提出简化版RNN&#xff08;minLSTM和minGRU&#xff09;。该工作的初始缘由&#xff1a;Transformer 在序列长度方面的扩展性限制重新引发了对可在训练期…

消费者Rebalance机制

优质博文&#xff1a;IT-BLOG-CN 一、消费者Rebalance机制 在Apache Kafka中&#xff0c;消费者组 Consumer Group会在以下几种情况下发生重新平衡Rebalance&#xff1a; 【1】消费者加入或离开消费者组&#xff1a; 当一个新的消费者加入消费者组或一个现有的消费者离开消费…

若依项目搭建(黑马经验)

欢迎你搜索和了解到若依&#xff0c;这个项目是从黑马课程的一个实践&#xff0c;更多的项目经历和平台搭建期待着我们的共同学习&#xff01; 关于若依 若依是一套全部开源的快速开发平台&#xff0c;毫无保留给个人及企业免费使用。 前端采用Vue、Element UI。后端采用Sprin…

使用Pytorch+Numpy+Matplotlib实现手写字体分类和图像显示

文章目录 1.引用2.内置图片数据集加载3.处理为batch类型4.设置运行设备5.查看数据6.绘图查看数据图片(1)不显示图片标签(2)打印图片标签(3)图片显示标签 7.定义卷积函数8.卷积实例化、损失函数、优化器9.训练和测试损失、正确率(1)训练(2)测试(3)循环(4)损失和正确率曲线(5)输出…

Spark_累加器

分布式共享只写变量 实现原理&#xff1a;  累加器用来把Executor端变量信息聚合到Driver端&#xff0c;在Driver程序中定义的变量&#xff0c;在Executor端的每个Task都会得到这个变量的一份新的副本&#xff0c;每个task更新这些副本的值后&#xff0c;传回Driver端进行mer…

执行node.js获取本机Ip命令,报:Error: Cannot find module ‘ip‘错误

Error: Cannot find module ip是由于没有改模块的依赖包&#xff0c;需要进行安装&#xff0c;以管理员的身份打开命令行&#xff0c;执行npm install ip 获取当前电脑的ip地址 方法一&#xff1a; const ip require("ip")/*** 1:获取当前电脑的ip地址*/ console.…

PPT技巧:保护PPT文件的方法有哪些?

PPT文件制作好之后保证文件不出错应该是很重要的&#xff0c;毕竟是要拿出去展示的&#xff0c;今天分享PPT加密方法给大家。希望能够帮助大家保护好自己的PPT文件。 打开密码 如果想要其他人需要输入正确的密码才能够打开文件查看并编辑&#xff0c;我们可以给PPT文件设置打…