NGINX配置server_tokens off隐藏Passenger版本及X-Powered-By头失效
问题原因
- 你使用的
proxy_hide_header指令仅对Nginx反向代理(即通过proxy_pass转发的上游服务响应)生效,Phusion Passenger是以Nginx模块形式嵌入运行的,不属于代理上游,因此该指令对Passenger注入的响应头完全无效。 server_tokens off仅能控制Nginx自身的版本号展示,不会影响Passenger模块注入的版本标识。Passenger有独立的版本头展示开关,不会继承Nginx的该配置。- Passenger相关的头控制指令如果仅写在局部
location块中,无法覆盖其他路径(比如你配置的隐藏文件拦截规则、静态资源路径)的响应,会出现头信息漏出的问题。
修复步骤
1. 关闭Passenger自带的版本号展示(无需额外模块)
编辑Nginx主配置文件(通常路径为/etc/nginx/nginx.conf),在http配置块中添加Passenger官方提供的版本隐藏开关:
http { # 保留原有http块内的其他配置不变 passenger_show_version_in_header off; # 原有的server块引入等配置保持不动 }
该配置生效后,会直接移除Passenger在Server和X-Powered-By头中追加的版本号:
Server头会从nginx + Phusion Passenger(R) 6.0.14变为nginx + Phusion Passenger(R)X-Powered-By头会从Phusion Passenger(R) 6.0.14变为Phusion Passenger(R)
注意:不要把该配置只写在单个
server或location块中,放在http块全局生效可以避免部分路径漏出版本信息。
2. (可选)完全移除X-Powered-By、自定义Server头
如果需要彻底删除X-Powered-By响应头,或是完全移除Server头中的Passenger标识,需要先安装headers-more-nginx-module模块:Debian/Ubuntu系统可以直接通过源安装nginx-extras包,该包默认内置此模块,无需手动编译。
安装完成后,同样在http块中添加如下配置:
http { # 其他原有配置不变 passenger_show_version_in_header off; # 彻底清除X-Powered-By头 more_clear_headers 'X-Powered-By'; # 如需将Server头修改为仅展示nginx,添加下行 more_set_headers 'Server: nginx'; }
3. 清理无效配置并重载
删除你原来写在location /块中的proxy_hide_header X-Powered-By;配置,该配置对Passenger场景无任何作用。
依次执行以下命令检查配置、重载Nginx生效:
nginx -t systemctl reload nginx
重载完成后再通过curl验证,即可看到响应头中的Passenger版本信息已被移除。
内容的提问来源于stack exchange,提问作者alilland
相关产品推荐
相关产品推荐

