6

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

谢谢!

4

2 回答 2

4

根据您使用的 Web 服务器,有些模块会为您提供来自 HTTP_X_FORWARDED_FOR 标头的真实客户端 IP 地址,或代理的等效地址。

我在 CloudFlare 后面的网络服务器上使用 Nginx,所以我使用这个:http ://wiki.nginx.org/HttpRealipModule

您需要为您的 Web 服务器配置模块,该模块从您的 CDN 的正确标头中获取真实的客户端 IP。

于 2013-05-23T08:23:48.993 回答
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

于 2017-07-07T15:49:57.383 回答