在 Amazon ELB 或其他代理后面时,如何拒绝通过源 IP 进行访问

hoo*_*enz 7 nginx

Nginx 有一个很好的功能,可以让您通过源 IP 地址限制对资源的访问。

但是,我注意到这在 nginx 位于代理或负载均衡器后面的情况下可能不起作用。就我而言,亚马逊 ELB。

我想为 datadog 代理和 Amazon ELB 运行状况检查提供一个状态页面。所以我想允许本地连接和来自 ELB 的连接,但拒绝其他一切。

以下内容无法按预期工作,因为它也允许来自 ELB 外部的流量访问状态页面。原因是因为 IP 似乎来自 ELB,并且允许规则不会查看标头来确定请求的真实来源。有没有办法告诉 nginx 使用哪个源 IP 来确定允许/拒绝规则?

location /status {
    stub_status;
    access_log off;
    allow 127.0.0.1;
    allow 10.0.0.0/16;
    deny all;
}
Run Code Online (Sandbox Code Playgroud)

hoo*_*enz 7

正如迈克尔·汉普顿所指出的那样。我可以使用 Real IP 模块。我不知道。

以下工作。

http { 
    real_ip_header X-Forwarded-For;
    set_real_ip_from 0.0.0.0/0;
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,此配置意味着任何可以直接连接到您的服务器(绕过负载平衡器)的人都可以伪造他们喜欢的任何 IP。 (3认同)