如何在 elastic beanstalk express 应用程序中隐藏 NGINX 服务器信息?

问题描述 投票:0回答:3

几天来我一直在努力解决这个问题。无论我做什么,我的应用程序服务器都会在 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 服务器信息这么难去掉!!!??

我觉得我已经接触到魔鬼本人了,他是杀不死的。

express nginx http-headers amazon-elastic-beanstalk
3个回答
0
投票

来自这份文件

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;
}

0
投票

非常感谢 IntelG 的 Fahim,他在这里发现了问题。

我错过了平台前面的点,如上面的问题所述,我将 conf 文件保存在

平台/nginx/conf.d

应该是

.platform/nginx/conf.d

为这种愚蠢的事情浪费了太多时间!!!


0
投票

如果你曾经使用这种方法隐藏 nginx 的版本,看起来像最新的平台版本和解决方案堆栈Node.js 16 AL2 版本 5.7.0 默认包括

server_tokens off;

这与我们包含在

.platform/nginx/conf.d

中的值发生冲突

直到你删除它,升级才会失败。

© www.soinside.com 2019 - 2024. All rights reserved.