📅  最后修改于: 2023-12-03 15:17:52.391000             🧑  作者: Mango
当服务器后面使用 Nginx
反向代理 Express
的时候,我们发现 Express
并不能正确获取客户端的真实 IP 地址。这是因为 Nginx
代理请求的时候,会默认把真实的客户端 IP 地址放到 X-Forwarded-For
请求头中,而 Express
不会自动获取,需要我们手动解析。
我们可以通过修改 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";
}
}
我们可以通过解析 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 地址。