在Nginx中定义HTTP响应头信息是一个常见的需求,可以用于安全加固、缓存控制、跨域设置等多种场景。以下是几种定义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;
}
当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;
}
如果需要更复杂的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';
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=()";
add_header
指令会继承父作用域的设置,除非在当前作用域重新定义always
参数可以确保header在所有响应状态码下都发送Server
)可能需要额外模块才能修改或删除nginx -s reload
通过合理配置HTTP头信息,可以显著提升Web应用的安全性和性能表现。