簡體   English   中英

Express js Invalid ip address in morgan logs when using nginx 反向代理

[英]Express js Invalid ip address in morgan logs when using nginx reverse proxy

我在 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
});

當我開發電話應用程序時,rest 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 反向代理。 所以我在我的應用程序中啟用了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}`);
});

當您使用自己的反向代理時,您必須輸入:

proxy_set_header X-Forwarded-For $remote_addr;

在我的 nginx 配置中: /etc/nginx/sites-available/default

解決了這個問題

必須滿足兩個條件。
由於vajad57顯示 nginx 配置:

proxy_set_header X-Forwarded-For $remote_addr;

以及使用摩根中間件之前的代碼(來自這個問題):

app.enable("trust proxy");

對我來說只能那樣工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM