nginx配置文件中获取客户端真实IP的方法

如果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伪造的问题。

你可能感兴趣的:(nginx配置文件中获取客户端真实IP的方法)