插件窝 干货文章 怎么通过Nginx定义Header头信息

怎么通过Nginx定义Header头信息

Header Nginx headers add 104    来源:    2025-04-24

通过Nginx定义Header头信息

在Nginx中定义HTTP响应头信息是一个常见的需求,可以用于安全加固、缓存控制、跨域设置等多种场景。以下是几种定义Header的方法:

1. 使用add_header指令

add_header是最常用的添加响应头的方法:

server {
    listen 80;
    server_name example.com;

    # 添加单个header
    add_header X-Frame-Options "SAMEORIGIN";

    # 添加多个headers
    add_header X-Content-Type-Options "nosniff";
    add_header X-XSS-Protection "1; mode=block";

    # 可以指定某些header只在特定状态码下添加
    add_header Cache-Control "no-cache, no-store, must-revalidate" always;
}

2. 使用proxy_set_header设置代理请求头

当Nginx作为反向代理时,可以使用proxy_set_header设置传递给后端服务器的请求头:

location / {
    proxy_pass http://backend;

    # 设置传递给后端的header
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

3. 使用headers_more模块

如果需要更复杂的header操作,可以编译安装headers_more模块:

# 删除Server头
more_clear_headers Server;

# 删除多个headers
more_clear_headers 'X-Powered-By' 'X-AspNet-Version';

# 设置条件header
more_set_headers -s 404 'X-Error: Not Found';

4. 常用安全相关Header示例

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header Content-Security-Policy "default-src 'self'";
add_header Referrer-Policy "no-referrer-when-downgrade";
add_header Permissions-Policy "geolocation=(), midi=(), camera=()";

5. 注意事项

  • add_header指令会继承父作用域的设置,除非在当前作用域重新定义
  • 使用always参数可以确保header在所有响应状态码下都发送
  • 某些header(如Server)可能需要额外模块才能修改或删除
  • 修改header后记得重载Nginx配置:nginx -s reload

通过合理配置HTTP头信息,可以显著提升Web应用的安全性和性能表现。