几天来我一直在努力解决这个问题。无论我做什么,我的应用程序服务器都会在 HTTP 响应标头中返回 NGINX 版本,并且它不符合 OWASP 安全建议:
我尝试以我能想到的所有方式手动编辑 express 中的服务器响应,但尽管如此,服务器版本仍不断显示:(express 函数试图删除总体 app.js 文件中的服务器响应标头)
app.use(function(req, res, next) {
res.removeHeader('server');
res.removeHeader('Server');
res.removeHeader("x-powered-by");
res.header("X-powered-by", "Blood, sweat, and tears.");
next();
});
我已经尝试了一大堆 .ebextensions 来在部署时手动修改 nginx.conf 文件,但没有成功......例如这里概述的内容:How to hide nginx version in elastic beanstalk
最近我决定“去他的,我只是要上传我自己的 nginx.conf 文件”并一直在上传,但仍然没有成功。这是我在 platform/nginx/conf.d 中发送给 AWS EB 的 nginx.conf 文件
user nginx;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
worker_processes auto;
worker_rlimit_nofile 33282;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
include conf.d/*.conf;
more_clear_headers Server;
server_tokens off;
more_set_headers 'Server: BLOOD_AND_SWEAT';
map $http_upgrade $connection_upgrade {
default "upgrade";
}
server {
listen 80 default_server;
root /var/app/current/public;
location / {
}
access_log /var/log/nginx/access.log main;
client_header_timeout 60;
client_body_timeout 60;
keepalive_timeout 60;
gzip off;
gzip_comp_level 4;
more_clear_headers Server;
server_tokens off;
more_set_headers 'Server: BLOOD_AND_SWEAT';
# Include the Elastic Beanstalk generated locations
include conf.d/elasticbeanstalk/01_static.conf;
include conf.d/elasticbeanstalk/healthd.conf;
}
}
几天来我一直在尝试一切。 我在这里做错了什么?为什么这个 NGINX 服务器信息这么难去掉!!!??
我觉得我已经接触到魔鬼本人了,他是杀不死的。
来自这份文件
http://nginx.org/en/docs/http/ngx_http_core_module.html#server_tokens
您可以在 http{ } 部分将 server_tokens 设置为关闭,如下所示:
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#tcp_nodelay on;
server_tokens off;
include /etc/nginx/conf.d/*.conf;
}
非常感谢 IntelG 的 Fahim,他在这里发现了问题。
我错过了平台前面的点,如上面的问题所述,我将 conf 文件保存在
平台/nginx/conf.d
应该是
.platform/nginx/conf.d
为这种愚蠢的事情浪费了太多时间!!!
如果你曾经使用这种方法隐藏 nginx 的版本,看起来像最新的平台版本和解决方案堆栈Node.js 16 AL2 版本 5.7.0 默认包括
server_tokens off;
这与我们包含在
.platform/nginx/conf.d
中的值发生冲突
直到你删除它,升级才会失败。