我有自己的VPS服务器,我在node.js中有脚本,它显示访问者的IP,但是当我访问网站时,我总是在控制台中获得本地IP地址(127.0.0.1)。 我用的是Nginx。
知道吗?
node.js脚本:
#!/usr/bin/env nodejs
const http = require('http');
const host = '127.0.0.1';
const port = 8080;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
var ip = (req.headers['x-forwarded-for'] || '').split(',').pop().trim() ||
req.connection.remoteAddress || req.socket.remoteAddress || req.connection.socket.remoteAddress;
console.log(`IP = ${ip}`);
});
server.listen(port, host);
Nginx代理/报头配置:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
您需要操纵您的nginx反向代理来传递请求者的IP地址。 将这两个设置添加到nginx.conf
中就可以了。
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
将这些行放在nginx.conf
的位置{。。。}
节中,以及您的proxy-pass
和其余部分。
通过这些更改,nginx在每个请求中插入两个http头:X-Forwarded-For和x-real-ip。 (有一个新的标准被转发:header,但到2020年中期,nginx还不能轻松处理它。)
然后,使用app.set()
向nodejs程序添加代理服务器支持,以解释这些头。 将这一行放在www
或http-server.js
Javascript程序中const app=express()
行之后不久。
app.set( 'trust proxy', 'loopback' )
然后,Express将为您处理X-Forwarded-For报头,并将适当的IP地址放入req.IP
中。
我链接了一些文档。 你最好读读它。