如果存在的$http\u x\u forwarded\u,则有条件nginx日志记录?
我有一个位于负载平衡器后面的web服务器,我试图让日志的第一个值为如果存在的$http\u x\u forwarded\u,则有条件nginx日志记录?,nginx,logging,Nginx,Logging,我有一个位于负载平衡器后面的web服务器,我试图让日志的第一个值为$http\u x\u forwarded\u for(如果存在)或$remote\u addr如果$http\u forwarded\u for为空(因为有时我直接点击机器,有时我从负载平衡器转发) 我尝试了以下方法,但没有成功: set $realip $http_x_forwarded_for; if ($http_x_forwarded_for ~ "") { set $realip $remote_add
$http\u x\u forwarded\u for
(如果存在)或$remote\u addr
如果$http\u forwarded\u for
为空(因为有时我直接点击机器,有时我从负载平衡器转发)
我尝试了以下方法,但没有成功:
set $realip $http_x_forwarded_for;
if ($http_x_forwarded_for ~ "") {
set $realip $remote_addr;
}
fastcgi_param REMOTE_ADDR $realip;
以及
set $realip $remote_addr;
if ($http_x_forwarded_for ~ "^(\d+\.\d+\.\d+\.\d+)") {
set $realip $1;
}
fastcgi_param REMOTE_ADDR $realip;
(如果我直接点击方框,这两个选项都只记录正确的IP,所有负载平衡点击都显示负载平衡器的IP,而不是转发的IP)
我也试过了
map $http_x_forwarded_for $forwardexists {
~*^(?![\s\S]) $http_x_real_ip; ## also tried ~"" and just "" to match empty
default $http_x_forwarded_for;
}
log_format forwardedIP '$forwardexists $remote_user [$time_local] '
'"$request" $status $body_bytes_sent "$http_referer" '
'"$http_user_agent"' ;
然后使用forwardedIP
作为我的日志格式,但这只会显示转发的IP,并将所有其他请求完全留空
有什么方法可以实现我想要的吗?啊,终于想出来了,我需要使用:
map $http_x_forwarded_for $forwardexists {
"" $remote_addr;
default $http_x_forwarded_for;
}