Nginx中“请求头瘦身”实为优化响应头:关闭server_tokens、清除冗余头(如Server/X-Powered-By)、禁用ETag、精简Vary、统一Cache-Control(含immutable)、隐藏上游注入头。

在 Nginx 中为静态资源“请求头瘦身”,实际是指精简或移除响应头(Response Headers)中不必要的字段,降低响应体积、提升传输效率,并增强安全性。注意:请求头(Request Headers)由客户端发送,Nginx 无法“瘦身”它;真正可操作的是对 Nginx 返回给客户端的响应头进行裁剪和优化。
关闭默认冗余响应头
Nginx 默认会添加一些非必需的响应头,如 Server(暴露版本)、X-Powered-By(若启用 FastCGI/Proxy 可能带出后端信息),这些既无功能价值,又可能带来安全风险。
- 在
http、server或location块中添加:
server_tokens off; —— 隐藏 Nginx 版本号(如从Server: nginx/1.24.0变为Server: nginx) - 使用 more_clear_headers(需安装
headers-more-nginx-module)可彻底删除:more_clear_headers 'Server' 'X-Powered-By' 'X-AspNet-Version'; - 若未编译该模块,可用原生指令弱化:
server_name_in_redirect off;+ 配合underscores_in_headers off;(防意外透传)
精简缓存与内容协商相关头
静态资源(如 .js/.css/.png)通常强依赖缓存,但默认响应头可能包含冗余字段,例如重复的 ETag、冗长的 Last-Modified 格式,或不必要开启的 Vary。
- 禁用 ETag(减少校验开销,配合强缓存更高效):
etag off; - 简化
Last-Modified(Nginx 默认已够简洁,无需额外处理) - 谨慎控制
Vary头:静态资源一般不需要按User-Agent或Accept-Encoding区分(CDN 和浏览器已自动处理),可显式清除:more_clear_headers 'Vary';(需 headers-more 模块)
或仅保留必要值:add_header Vary "Accept-Encoding";
压缩并统一 Cache-Control 策略
避免多个缓存头(如 Expires、Cache-Control、Pragma)共存造成混乱或冲突。推荐以 Cache-Control 为主,明确行为,同时剔除过时头。
- 统一设置静态资源缓存策略:
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2?|ttf|eot)$ {<br> expires 1y;<br> add_header Cache-Control "public, immutable, max-age=31536000";<br> add_header Pragma ""; # 清空旧值(部分客户端会读取)<br> add_header Expires ""; # 同上<br> } - 注意:
immutable是关键——告诉浏览器资源不会变更,跳过条件请求(如 If-None-Match),真正实现“瘦身”效果
过滤动态注入的响应头
当静态资源经由 PHP、Node.js 或反向代理后端提供时,上游可能注入无关头(如 X-Debug-Bar、X-RateLimit-Limit)。应在 Nginx 层拦截。
- 使用 proxy_hide_header(反向代理场景):
proxy_hide_header X-Powered-By;<br> proxy_hide_header X-Debug-Bar;<br> proxy_hide_header X-RateLimit-Remaining;
- 若为 FastCGI(如 PHP-FPM),用:
fastcgi_hide_header X-Powered-By; - 所有隐藏操作应在对应上下文(
location或server)中配置,避免全局误删


















