NodeJS Express js使用nginx反向代理时morgan日志中的IP地址无效

3yhwsihp  于 2023-06-22  发布在  Node.js
关注(0)|答案(2)|浏览(149)

我在express js中有一个rest api。我使用express-rate-limiter来限制这样的请求。

const limiter = rateLimit({
  windowMs: 60 * 60 * 1000, // 60 minutes
  max: 1000, // limit each IP to 1000 requests per windowMs
});

当我开发手机应用程序时,其余的API说:
从该IP创建的帐户太多,请一小时后重试
所以我在我的应用程序中添加了morgan,这样我就可以看到向api发出的请求的日志。

if (process.env.NODE_ENV === 'development') {
  app.use(morgan('dev'));
} else {
  app.use(morgan('combined'));
}

但是当我检查日志时,我为每个请求得到127.0.0.1,而不是用户的IP地址。

127.0.0.1 - - [06/Apr/2021:20:52:13 +0000] "GET /api/daily-deals HTTP/1.1" 200 4922 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"

我用的是nginx reverse proxy。所以我在我的应用程序中启用了trust proxy
但我仍然没有得到当前的IP。知道为什么吗

app.set('trust proxy', '127.0.0.1');

app.listen(PORT, '127.0.0.1', (err) => {
  if (err) {
    console.log(err);
  }

  // eslint-disable-next-line
  console.log(`Server running in ${process.env.NODE_ENV} mode on port ${PORT}`);
});
cl25kdpy

cl25kdpy1#

当您使用自己的反向代理时,您必须:

proxy_set_header X-Forwarded-For $remote_addr;

我的nginx配置:/etc/nginx/sites-available/default
和/或

app.enable("trust proxy");

必须在服务器上使用morgan之前添加。
解决了这个问题

yquaqz18

yquaqz182#

必须满足两个条件。
由于vajad57显示nginx配置:

proxy_set_header X-Forwarded-For $remote_addr;

使用morgan middleware之前的代码(来自this question):

app.enable("trust proxy");

对我来说只有这样才行。

相关问题