当您没有代理IP列表时会发生什么?使用Akamai,Google,Edgecast或CloudFront等网站加速服务时;从他们那里获得会话的IP总是很难。
在CDN上测试我们的codeigniter应用程序时,我们注意到IP是作为CDN IP而不是会话数据库中的客户端IP传递的。
你怎么能解决这个问题?
/*
|--------------------------------------------------------------------------
| Reverse Proxy IPs
|--------------------------------------------------------------------------
|
| If your server is behind a reverse proxy, you must whitelist the proxy IP
| addresses from which CodeIgniter should trust the HTTP_X_FORWARDED_FOR
| header in order to properly identify the visitor's IP address.
| Comma-delimited, e.g. '10.0.1.200,10.0.1.201'
|
*/
$config['proxy_ips'] = '';
谢谢!
答案 0 :(得分:4)
根据您使用的Web服务器,有些模块可以从HTTP_X_FORWARDED_FOR标头或代理的等效文件中为您提供真正的客户端IP地址。
我在CloudFlare后面的Web服务器上使用Nginx,所以我使用它:http://wiki.nginx.org/HttpRealipModule
您需要为您的网络服务器配置模块,该模块从CDN的正确标头中获取真实的客户端IP。
答案 1 :(得分:0)
如果要在Codeigniter 3中处理IP而不在Web服务器中处理IP,可以在此配置中添加CDN IP:
$config['proxy_ips'] = ['10.0.1.2'];
或提供CDN网络掩码:
$config['proxy_ips'] = '10.0.1.0/24';
如果您的服务器总是落后于CDN:
$config['proxy_ips'] = isset($_SERVER["REMOTE_ADDR"]) ? $_SERVER["REMOTE_ADDR"] : '';
$this->input->ip_address(); //$this=>CI
如果匹配的代理IP,它将返回IP,否则它将返回$_SERVER["REMOTE_ADDR"]
,这可以获得真实的客户端IP。