Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果存在的$http\u x\u forwarded\u,则有条件nginx日志记录?_Nginx_Logging - Fatal编程技术网

如果存在的$http\u x\u forwarded\u,则有条件nginx日志记录?

如果存在的$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

我有一个位于负载平衡器后面的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_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;
        }