📜  ngingx proxy express 获取真实IP - Javascript(1)

📅  最后修改于: 2023-12-03 15:17:52.391000             🧑  作者: Mango

使用 Nginx 反向代理 Express 获取真实 IP

当服务器后面使用 Nginx 反向代理 Express 的时候,我们发现 Express 并不能正确获取客户端的真实 IP 地址。这是因为 Nginx 代理请求的时候,会默认把真实的客户端 IP 地址放到 X-Forwarded-For 请求头中,而 Express 不会自动获取,需要我们手动解析。

通过 Nginx 来转发 X-Forwarded-For 请求头

我们可以通过修改 Nginx 配置文件来实现把 X-Forwarded-For 请求头转发到 Express 中的效果。以下是一个示例的 nginx 配置文件:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_buffering off;
        proxy_request_buffering off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
    }
}
在 Express 中获取真实 IP 地址

我们可以通过解析 X-Forwarded-For 请求头来获取客户端的真实 IP 地址。在 Express 中,我们可以使用 request.headers['x-forwarded-for'] 来获取。

以下是一个示例的 Express 中间件来获取客户端真实 IP 地址的示例代码:

function getClientIp(request) {
    const xForwardedFor = request.headers['x-forwarded-for'];
    if (xForwardedFor) {
        return xForwardedFor.split(',')[0];
    }
    return request.connection.remoteAddress;
}

app.use(function(request, response, next) {
    const clientIp = getClientIp(request);
    console.log('client IP:', clientIp);
    next();
});
结论

在使用 Nginx 反向代理 Express 的时候,我们可以通过配置 Nginx 将客户端的真实 IP 地址放到 X-Forwarded-For 请求头中,并在 Express 中解析该请求头来获取客户端真实 IP 地址。