在使用nginx作為web伺服器時,我們有時需要獲取到客戶端的真實IP地址,這個問題可能會讓我們感到困擾,因為客戶端的真實IP地址並不是很好獲取。下面,我們將從多個方面來探討如何獲取nginx客戶端真實IP地址。
一、通過$remote_addr變數獲取客戶端IP
在nginx配置文件中,我們可以通過$remote_addr變數來獲取客戶端IP地址。這個變數不是nginx私有的變數,通常我們使用它來記錄客戶端IP地址。
location / { access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log; #獲取客戶端IP地址,使用$remote_addr變數 add_header X-Real-IP $remote_addr; }
在上面的配置中,我們通過add_header指令來設置X-Real-IP頭部信息,將$remote_addr變數的值賦給X-Real-IP頭部信息。
二、通過代理伺服器獲取客戶端IP
在某些情況下,我們的nginx前面可能會有一個或多個代理伺服器,而客戶端的真實IP地址可能會被代理伺服器隱藏掉,這時我們就需要通過代理伺服器來獲取客戶端真實IP地址。
在代理伺服器中,我們需要通過add_header指令來設置X-Real-IP頭部信息。然後在nginx中,我們需要使用$proxy_add_x_forwarded_for變數來獲取客戶端IP地址。這個變數的值包括代理伺服器的IP地址和客戶端的IP地址。
#代理伺服器配置 location / { proxy_pass http://backend; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } #nginx伺服器配置 location / { access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log; #獲取客戶端IP地址,使用$proxy_add_x_forwarded_for變數 add_header X-Real-IP $proxy_add_x_forwarded_for; }
在上面的配置中,我們在代理伺服器中通過proxy_set_header指令來設置X-Real-IP和X-Forwarded-For頭部信息,然後在nginx中,我們通過add_header指令將客戶端IP地址寫入X-Real-IP頭部信息。
三、通過第三方模塊獲取客戶端IP
除了上面兩種方法,還有一種方法是通過第三方模塊來獲取客戶端IP地址。其中比較流行的模塊是realip和set-misc模塊。
在使用realip模塊時,需要在nginx配置文件中先載入該模塊,然後在需要獲取客戶端IP地址的地方使用set_real_ip_from指令來設置代理伺服器的IP地址,最後使用real_ip_header指令來設置客戶端IP地址所在的頭部信息。
load_module modules/ngx_http_realip_module.so; http { realip_header X-Real-IP; set_real_ip_from 10.10.10.10; }
在上面的配置中,我們先通過load_module指令來載入realip模塊,然後在http模塊中使用realip_header和set_real_ip_from指令。realip_header指令用來設置客戶端IP地址所在的頭部信息,set_real_ip_from指令用來設置代理伺服器的IP地址。
另外一種方法是使用set-misc模塊,該模塊可以讓我們更好地操作nginx的變數。在使用該模塊時,我們可以通過ngx_http_set_real_ip_from和ngx_http_realip_header指令來設置代理伺服器的IP地址和客戶端IP地址所在的頭部信息。
set $realip $remote_addr; set_real_ip_from 10.10.10.10; realip_header X-Real-IP;
在上面的配置中,我們先使用set指令創建了一個名為realip的變數,然後通過set_real_ip_from指令設置代理伺服器的IP地址,最後使用realip_header指令來設置客戶端IP地址所在的頭部信息。
四、總結
通過以上幾種方式,我們可以輕鬆地獲取nginx客戶端真實IP地址。在實際使用中,我們需要根據自己的實際情況,選擇合適的方法來獲取客戶端IP地址。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/270630.html