Nginx提供了多种方式来操作HTTP响应头信息,以下是几种常用的实现方法:
使用add_header
指令可以添加自定义响应头:
add_header X-Custom-Header "Custom Value";
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
proxy_hide_header Server; # 先隐藏原始Server头
add_header Server "MyCustomServer"; # 添加自定义Server头
proxy_hide_header X-Powered-By;
more_clear_headers 'Server';
注意:more_clear_headers
需要ngx_headers_more模块支持。
可以根据请求条件设置不同的响应头:
location /secure {
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header Content-Security-Policy "default-src 'self'";
}
map $http_user_agent $custom_header {
default "";
"~*chrome" "Chrome-User";
"~*firefox" "Firefox-User";
}
server {
add_header X-User-Type $custom_header;
}
当Nginx作为反向代理时:
location / {
proxy_pass http://backend;
# 传递原始响应头
proxy_pass_header Server;
proxy_pass_header Set-Cookie;
# 修改后端返回的响应头
proxy_hide_header X-Powered-By;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
add_header Referrer-Policy "strict-origin-when-cross-origin";
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://cdn.example.com; img-src 'self' data: https://*.example.com";
add_header
指令会继承父作用域的设置,除非在当前作用域重新定义always
参数才能在错误响应中发送以上方法可以根据实际需求组合使用,灵活控制Nginx的响应头信息。