假如有一個客戶端請求經過了nginx代理轉發以後發送給node.js服務器,如果我們想要獲取到客戶端的真實ip地址,而不是nginx服務器的地址的話應該怎麼做呢?
首先在nginx中配置一下被代理服務器接收到的header信息
proxy_set_header用來配置被代理服務器接收到的header信息。配置語法如下:
proxy_set_header field value;
其中,field為要設置的變量名,value為變量的值。
在這裡我們將真實的客戶端ip設置為X-Real-IP,然後傳給被代理服務器,這樣被代理服務器就可以通過header信息來獲取到客戶端真實的ip了。配置如下:
server {
listen 80;
server_name yuanjingyan.com;
if ( $host !~* "yuanjingyan.com" ) {
return 404;
}
location / {
proxy_pass http://ip:port;
proxy_set_header X-Real-IP $remote_addr;
}
}
然後在node.js中獲取客戶端真實ip
在node.js中我們可以通過在nginx中配置的變量X-Real-IP來獲取客戶端真實ip,代碼如下:
var clientIP = context.req.headers['x-real-ip']; //客戶端ip,獲取的是經過nginx代理後的真實請求ip
if(!clientIP){
clientIP=context.req.connection.remoteAddress; //客戶端ip,獲取的是沒有經過nginx代理後的真實請求ip
}
其中要注意的是headers中的「x-real-ip」要寫成小寫的,不能寫成「X-Real-IP」,否則獲取不到數據。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/235066.html