Express js 使用 nginx 反向代理时 morgan 日志中的无效 ip 地址
Express js Invalid ip address in morgan logs when using nginx reverse proxy
我在 express js 休息 api。我正在使用 express-rate-limiter 来限制这样的请求。
const limiter = rateLimit({
windowMs: 60 * 60 * 1000, // 60 minutes
max: 1000, // limit each IP to 1000 requests per windowMs
});
当我开发 phone 应用程序时,其他人 api 说:
Too many accounts created from this IP, please try again after an hour
所以我将 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;
以及使用摩根中间件之前的代码(来自this question):
app.enable("trust proxy");
对我来说只有这样。
我在 express js 休息 api。我正在使用 express-rate-limiter 来限制这样的请求。
const limiter = rateLimit({
windowMs: 60 * 60 * 1000, // 60 minutes
max: 1000, // limit each IP to 1000 requests per windowMs
});
当我开发 phone 应用程序时,其他人 api 说:
Too many accounts created from this IP, please try again after an hour
所以我将 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;
以及使用摩根中间件之前的代码(来自this question):
app.enable("trust proxy");
对我来说只有这样。