代理后面的CodeIgniter会话

时间:2012-08-15 03:09:58

标签: php database codeigniter session proxy

当您没有代理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'] = '';

谢谢!

2 个答案:

答案 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"] : '';

获取IP方法:

$this->input->ip_address(); //$this=>CI

如果匹配的代理IP,它将返回IP,否则它将返回$_SERVER["REMOTE_ADDR"],这可以获得真实的客户端IP。

  

参考Codeigniter 3