写点什么

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

  • 2024-10-10
    山东
  • 本文字数:1687 字

    阅读完需:约 6 分钟

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

什么是 add_header?

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

add_header 的基本语法

add_header 指令的基本语法如下:

Nginxadd_header name value [always];
复制代码

name :要添加的头部名称。

value :头部的值。

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

add_header 的实际应用场景

1、安全性增强

Content Security Policy (CSP)

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

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

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

Nginxadd_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

Nginxadd_header Referrer-Policy "strict-origin-when-cross-origin";
复制代码


X-XSS-Protection

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

Nginxadd_header X-XSS-Protection "1; mode=block";
复制代码


X-Content-Type-Options

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

Nginxadd_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 访问网站,提高安全性。

Nginxadd_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
复制代码

2、性能优化

Cache-Control

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

Nginxadd_header Cache-Control "public, max-age=31536000";
复制代码

3、API 控制

Access-Control-Allow-Origin

Nginxadd_header Access-Control-Allow-Origin "*";
复制代码


Access-Control-Allow-Methods

Nginxadd_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
复制代码


Access-Control-Allow-Headers

Nginxadd_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 开源社区版!

用户头像

还未添加个人签名 2023-03-07 加入

塑造企业一体化研发新范式

评论

发布
暂无评论
浅谈 Nginx 头部配置:add_header 及其常见功能实践_nginx_inBuilder低代码平台_InfoQ写作社区