假如有一個客戶端請求經過了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”,否則獲取不到數據。
版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。
發表評論
請登錄后評論...
登錄后才能評論