如何在使用CloudFlare和MaxMind的GeoIP和mod_geoip时获取用户的IP?

hel*_*lly 4 apache .htaccess geolocation geoip cloudflare

CloudFlare从原始IP提供用户的国家/地区,但我需要在城市级别上的位置,因此我使用mod_geoip Apache脚本添加了MaxMind的GeoCityLite.

现在的问题是在PHP变量中获取IP,我正在使用类似的东西

$country = apache_note("GEOIP_COUNTRY_CODE");
Run Code Online (Sandbox Code Playgroud)

这很好,但IP mod_geoip使用的是CloudFlare DNS,而不是最终用户.CloudFlare提供服务器变量HTTP_CF_CONNECTING_IP以使用最终用户IP,但如何在mod_geoip中使用THAT变量/ IP?

这可以通过htaccess中的几行完成吗?

编辑:我有一个解决方法使用php API进行geoip这很容易,但是使用apache查找php api的基准测试要好得多,所以我宁愿找到这个解决方案.

Eun*_*Eun 17

在调用geoip之前执行此操作:

$_SERVER['REMOTE_ADDR'] = isset($_SERVER['HTTP_CF_CONNECTING_IP']) ? $_SERVER['HTTP_CF_CONNECTING_IP'] : $_SERVER['REMOTE_ADDR'];
Run Code Online (Sandbox Code Playgroud)


Cyc*_*one -3

要获取存储在诸如 之类的变量中的用户 IP 地址$ip,您可以通过以下几种方式来实现:

$ip = $_SERVER['REMOTE_ADDR'];
Run Code Online (Sandbox Code Playgroud)

或者

$ip = getenv('REMOTE_ADDR');
Run Code Online (Sandbox Code Playgroud)