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

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐