如何获取真实的的IP地址
解析CDN下获取真实IP地址的PHP代码
我最近在获取用户IP地址的时候发现了一个问题,当我们的网站接入了CDN内容分发的时候网站获取的IP地址并非真实的IP地址,因此我们需要获得真实的IP地址就要通过HTTP标头来获取真实的IP地址,下面我就给大家介绍一下如何绕过CDN获取真实的IP地址。
获取访问者的真实IP地址是使用CDN(内容分发网络)时常见的需求。然而,$_SERVER['REMOTE_ADDR']返回的可能是CDN服务器的IP地址,而不是实际访问者的IP地址。在本文中,我们将介绍如何修改代码以获取真实的IP地址,并提供一个示例的PHP代码段。
1. 识别CDN的真实IP地址
当使用 CDN时,我们可以通过识别特定的HTTP标头来获取真实的IP地址。代码中的第一个条件检查是否存在HTTP_CF_CONNECTING_IP标头,如果存在,则使用该标头的值作为真实的IP地址。这是因为CDN将访问者的IP地址存储在这个特定的HTTP标头中。
2. 使用代理服务器的情况
如果HTTP_CF_CONNECTING_IP标头不存在,我们继续检查其他常见的HTTP标头,如HTTP_X_FORWARDED_FOR和HTTP_X_REAL_IP。这些标头通常用于在代理服务器或反向代理服务器上传递真实的客户端IP地址。如果这些标头存在,我们可以使用它们中的第一个IP地址作为真实的IP地址。这样,我们可以绕过CDN服务器,直接获取访问者的IP地址。
3. 直接连接到服务器的IP地址
最后,如果以上标头都不存在,我们退回到使用$_SERVER['REMOTE_ADDR'],它表示直接连接到服务器的IP地址。这是最后的备选方案,适用于没有代理服务器或反向代理服务器的情况。
示例代码:
<?php
if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) {
// cdn
$ip = $_SERVER['HTTP_CF_CONNECTING_IP'];
} elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
// Forwarded for proxy
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} elseif (isset($_SERVER['HTTP_X_REAL_IP'])) {
// Nginx reverse proxy
$ip = $_SERVER['HTTP_X_REAL_IP'];
} else {
// Direct connection
$ip = $_SERVER['REMOTE_ADDR'];
}
echo $ip;
?>
通过使用上述代码,你可以获取到访问者的真实IP地址,而不是CDN服务器的IP地址。确保根据你所使用的CDN和反向代理服务器的配置进行适当的调整,以获得准确的IP地址。这样,你可以在需要时进行进一步处理或记录真实的访问者IP地址。
文章链接:https://www.lilianhua.com/how-to-obtain-the-real-ip-address.html
English (US)
Español (ES)
Português (PT)
Français (CA)
Español (MX)
Español (VE)
Español (CO)
Español (AR)
Português (BR)
Quechua (PE)
Guaraní (PY)
简体中文 (ZH)
繁體中文 (HK)
日本語 (JP)
한국어 (KR)
हिन्दी (HI)
Pilipino (PH)
ไทย (TH)
Tiếng Việt (VN)
Bahasa Melayu (MY)
Bahasa Indonesia (ID)
বাংলা (BD)
اردو (PK)
සිංහල (LK)
ភាសាខ្មែរ (KH)
English (UK)
Français (FR)
Deutsch (DE)
Italiano (IT)
Русский (RU)
Nederlands (NL)
Türkçe (TR)
Polski (PL)
Svenska (SE)
Norsk (NO)
Dansk (DK)
Suomi (FI)
Ελληνικά (GR)
Čeština (CZ)
Magyar (HU)
Română (RO)
Български (BG)
Српски (RS)
Українська (UA)


