Nginx 有一个很好的功能,可以让你通过源 IP 地址限制对资源的访问。
但是,我注意到,如果 nginx 位于代理或负载均衡器后面,则可能不起作用。在我的例子中是 Amazon 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;
}
答案1
正如 Michael Hampton 指出的那样。我可以使用 Real IP 模块。我之前不知道这个。
以下操作有效。
http {
real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;
}