vit*_*tch 27 configuration nginx amazon-ec2 amazon-web-services amazon-elb
我在 Amazon ELB 负载均衡器后面有一组 Nginx 服务器。我正在使用 set_real_ip(来自HttpRealIpModule),以便我可以访问这些服务器上的原始客户端 IP 地址(用于传递到 php-fpm 并在HttpGeoIPModule 中使用)。
貌似set_real_ip_from
在nginx配置中只能接受一个IP地址。但是,关于 ELB 机器亚马逊说:
注意:因为与 LoadBalancer 关联的 IP 地址集会随着时间的推移而改变,所以永远不要使用任何特定的 IP 地址创建“A”记录。如果您想为 LoadBalancer 使用友好的 DNS 名称而不是 Elastic Load Balancing 服务生成的名称,您应该为 LoadBalancer DNS 名称创建 CNAME 记录,或使用 Amazon Route 53 创建托管区域。有关更多信息,请参阅在 Elastic Load Balancing 中使用域名
但是如果我需要输入一个 IP 地址,我就不能使用 CNAME(亚马逊的或我自己的)。这个问题有解决方案吗?
kol*_*ack 46
如果你能保证所有请求都来自 ELB(我不熟悉),你可以尝试:
real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;
Run Code Online (Sandbox Code Playgroud)
这应该告诉 nginx 信任来自任何人的 X-Forwarded-For 标头。不利的一面是,如果有人直接访问您的服务器,他们将能够欺骗 X-Forwarded-For 标头,而 nginx 将使用错误的客户端 IP 地址。
小智 17
今天的最佳实践是使用 VPC,因此,您将知道 ELB 的确切 CIDR。然后,您可以在 Nginx 配置文件中添加如下内容:
real_ip_header X-Forwarded-For;
set_real_ip_from 10.0.0.0/8;
Run Code Online (Sandbox Code Playgroud)
小智 9
使用 VPC CIDR for set_real_ip_from
You can find it in Amazon console under VPC => Your VPC(替换<your VPC CIDR here>
为它):
real_ip_header X-Forwarded-For;
set_real_ip_from <your VPC CIDR here>;
Run Code Online (Sandbox Code Playgroud)
小智 5
该realip_module,在X -转发,对于情况下,该模块使用最后一个IP地址在美国的X转发,对于更换头。仅当设置real_ip_header
和时,此模块将不起作用set_real_ip_form
。这是因为该模块将使用代理 IP 地址而不是客户端 IP。要解决这个real_ip_recursive
指令,应该启用。
此外,如果您有在实例上部署和更新的 SSL 证书(例如 letencrypt 或 certbot 证书)。这些证书颁发机构可能会尝试通过 IPV6 验证这些证书。
因此,拥有 IPV6 也很重要。所以 Nginx 配置文件也应该包含 set_real_ip_from IPV6 地址。
real_ip_header X-Forwarded-For;
real_ip_recursive on;
set_real_ip_from <your VPC IPV4 CIDR here>;
set_real_ip_from <your VPC IPV6 CIDR here>;
Run Code Online (Sandbox Code Playgroud)
如果其他安全限制适用,我们可能还需要set_real_ip_from
为 cloudfront/elb/ec2 子网包含VPC CIDR(IPV4 和 IPV6)。
归档时间: |
|
查看次数: |
34940 次 |
最近记录: |