首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nginx -允许源IP

Nginx -允许源IP
EN

Stack Overflow用户
提问于 2016-03-29 02:13:14
回答 2查看 16.8K关注 0票数 15

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-29 04:08:26

remote_addr将引用代理,但您可以将代理配置为发送带有报头字段X-真实IP/X-Forwarded-For的客户端地址。

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

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

后端nginx允许/拒绝:

代码语言:javascript
复制
location / {
    allow <your ip>;
    allow 127.0.0.1;
    deny  all;
}

后端nginx realip配置:

代码语言:javascript
复制
set_real_ip_from  <your proxy>;
real_ip_header    X-Forwarded-For;

在您的nginx代理配置上:

代码语言:javascript
复制
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并将其他地址列入白名单。

票数 15
EN

Stack Overflow用户

发布于 2018-12-25 14:45:00

我使用http_geo模块通过以下配置使其正常工作:

代码语言:javascript
复制
geo $remote_addr $give_access {
    proxy 172.0.0.0/8; # <-- Private IP range here
    default 0;
    11.22.33.44 1; # <-- Allowed IP here
}


server {

    # more config ... 

    location ^~ /secure_url_here {
        if ($give_access = 0) {
          return 403; 
        }
        try_files $uri $uri/ /index.php?$args; # <-- Your directive here
    }
}

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36268272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档