![](/img/trans.png)
[英]Getting Client IP Using PHP with Load Balancer (X-Forwarded-For Header)
[英]Symfony2 uses wrong “x-forwarded-for” on AWS Load Balancer / 2 Ip addresses
简单/小问题。
我的Amazon AWS ELB向我发送了以下标头。
x-forwarded-for 84.134.167.231, 172.31.17.157
x-forwarded-host app.example.org
x-forwarded-port 443
x-forwarded-proto https
x-forwarded-server ip-172-31-11-2.eu-central-1.compute.internal
但是请求使用第二个,即本地计算机的IP地址。 -172.31.17.157
有人知道如何解决此问题吗? 是否可以覆盖Symfony的“获取IP”功能?
提前致谢!
// edit 1-HTTPs配置
files:
/etc/httpd/conf.d/ssl.conf:
mode: "000644"
owner: root
group: root
content: |
LoadModule ssl_module modules/mod_ssl.so
Listen 443
<VirtualHost *:443>
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
SSLEngine on
SSLCertificateFile "/etc/pki/tls/certs/server.crt"
SSLCertificateKeyFile "/etc/pki/tls/certs/server.key"
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
SSLSessionTickets Off
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
ProxyPass / http://localhost:80/ retry=0
ProxyPassReverse / http://localhost:80/
ProxyPreserveHost on
RequestHeader set X-Forwarded-Proto "https" early
</VirtualHost>
是的,您将需要覆盖getIP函数(或任何等效函数)以使其适用于ELB。 注意,仅适用于ELB。
根本的问题是X-Forwarded-For
标准尚未达成共识。
大多数代理工具(例如Nginx)将设置X-Forwarded-For: client, proxy1, proxy2
。 但是,ELB将设置X-Forwarded-For: proxy1, proxy2, client
。
因此,大多数Web框架在使用ELB时都会出现IP欺骗问题。
修复很简单,只需要选择X-Forwarded-For
的最后一部分即可。 但是正如您可以想象的那样,如果一个请求通过使用不同标准的多个代理路由,则最终没有简单的方法来找到真实的IP地址。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.