如何将允许/拒绝与 set_real_ip_from 结合使用?

如何将允许/拒绝与 set_real_ip_from 结合使用?

我的 nginx 后端服务器应该只接受来自前端 1.2.3.4 的请求。但是,我还希望 nginx 记录正确的 IP 地址,因此我使用set_real_ip_from。但这样做会导致allow配置中的规则不匹配,并且 nginx 将始终返回 403。以下是相关配置:

allow  1.2.3.4;
deny  all;

set_real_ip_from  1.2.3.4;
real_ip_heaader  X-Real-IP;

我该如何解决这个问题?

答案1

我自己也在寻找这个问题,因为我花了“一段时间”才找到解决方案,所以我将它放在这里以方便其他人。

在这种情况下,允许/拒绝构造将不起作用,因为它们不适用于真实的 IP 变量。

相反,你可以使用$http_x_forwarded_for多变的:

## this goes before server section
## it allows us to check if forwarded ip is allowed to make request or not
map $http_x_real_ip $allowed {
    default false;

    ## your ip goes here
    ~\s111.111.111.111 true;
    ## other ips you want to allow
}

server {
    ## ... other instructions...

    set_real_ip_from  1.2.3.4;
    real_ip_header  X-Forwarded-For;

    ## you may want to add this to get "truly" real ip
    real_ip_recursive  on;

    ## ... other instructions...

    ## or any other location you need
    location / {
        if ($allowed = false) {
            return 403;
        }
        ## ... other instructions...
    }
}

相关内容