Nginx - 允许原始IP

时间:2016-03-28 18:13:14

标签: nginx proxy whitelist

Nginx支持allowdeny语法来限制IP,例如: allow 192.168.1.1;。但是,如果流量通过反向代理,则IP将引用代理的IP。那么如何将其配置为将特定原始IP列入白名单并拒绝所有其他传入请求?

2 个答案:

答案 0 :(得分:12)

remote_addr将引用代理,但您可以配置代理以使用标头字段X-Real-IP / X-Forwarded-For发送客户端地址。

结合ngx_http_realip模块,您可以修改传入标头以使用remote_addr的真实客户端地址。我相信这将使用allow / deny语法按预期工作。

只是为了澄清 - 启用和配置模块后,允许/拒绝语法应该相同。替换下面的IP和您的代理地址。

后端nginx允许/拒绝:

location / {
    allow <your ip>;
    allow 127.0.0.1;
    deny  all;
}

后端nginx realip配置:

set_real_ip_from  <your proxy>;
real_ip_header    X-Forwarded-For;

在您的nginx代理配置上:

proxy_set_header        X-Real-IP       $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

如果涉及多个中间代理,您需要使用set_real_ip_from指令启用real_ip_recursive并将其他地址列入白名单。

答案 1 :(得分:1)

让这些对我有用。

geo $remote_addr $giveaccess {
      proxy 172.0.0.0/8; <-- Private IP range here
      default 0;
      11.22.33.44 1; <-- Allowed IP here
    }


server{
##
    location ^~ /secure_url_here {
        if ($giveaccess = 0){
          return 403; 
        }
        try_files $uri $uri/ /index.php?$args; <-- Add this line specific for your CMS, if required.
    }

参考:http://nginx.org/en/docs/http/ngx_http_geo_module.html