【问题标题】:CodeIgniter session behind proxy代理后面的 CodeIgniter 会话
【发布时间】:2012-08-11 09:56:17
【问题描述】:

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

谢谢!

【问题讨论】:

  • CDN 只提供静态内容,不是吗?
  • 好吧,如果你想一想,cloudflare 最近开始支持动态内容,所以我正在考虑这个领域的未来发展,因为它也将更普遍地从 CDN 提供服务器动态内容......顺便说一句cloudflare 也这样做。
  • 我也对此感兴趣
  • 您的 CDN 应传递 HTTP_X_FORWARDED_FOR 标头,该标头应具有原始请求者的 IP。我相信 CI v2.0 或更高版本应该已经为您透明地执行此操作(请参阅会话库 _ip_address() 方法)

标签: php database codeigniter session proxy


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    如果您想在 Codeigniter 3 中处理 IP 而不是在 Web 服务器中,您可以将 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-07
      • 2017-11-19
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多