如果X-Forwarded-For(XFF)中保存了客户端IP则从XFF中获取,如果XFF为空则直接利用$remote_addr获取和nginx直连的机器的IP作为客户端IP。
详细代码如下
server {
listen 80;
server_name localhost;
set $real_client $remote_addr;
#不考虑伪造XFF及XFF格式不正确的情况
if ($http_x_forwarded_for ~ "^(\d+)\.(\d+)\.(\d+).(\d+)") {
set $real_client $1.$2.$3.$4;
}
location / {
#just for test
echo "real_client=$real_client";
}
}
注:这里假定XFF如果不为空,即认为XFF格式是正确的,包含了客户端IP。
如果要用正则表达式匹配正确的IP格式,正则表达式会很复杂,而且也不能解决XFF伪造的问题。