Php AWS ec2实例从私有IP地址获取多个请求?

Php AWS ec2实例从私有IP地址获取多个请求?,php,amazon-web-services,server,Php,Amazon Web Services,Server,我在AWS上有一个网站,最近我决定运行一个php函数来跟踪哪里/谁在请求我的网站。我收到一个来自3个私人IP地址的对我主页的持久请求。它们相隔20秒,每30秒发生一次。172.31.44.xxx172.31.8.xxx172.31.29.xx 私人IP如何请求我的网站?我无法确定连接的来源。 我使用这个PHP代码来获取IP if(!empty($_SERVER['HTTP_CLIENT_IP'])){ $ip = $_SERVER['HTTP_CLIENT_IP']; }elseif (

我在AWS上有一个网站,最近我决定运行一个php函数来跟踪哪里/谁在请求我的网站。我收到一个来自3个私人IP地址的对我主页的持久请求。它们相隔20秒,每30秒发生一次。
172.31.44.xxx
172.31.8.xxx
172.31.29.xx
私人IP如何请求我的网站?我无法确定连接的来源。
我使用这个PHP代码来获取IP

if(!empty($_SERVER['HTTP_CLIENT_IP'])){
    $ip = $_SERVER['HTTP_CLIENT_IP'];
}elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
    $ip = $_SERVER['REMOTE_ADDR'];
}
我的代码中是否有错误,无法正确检索IP?还是有其他我不知道的事情。让我知道你的想法,
谢谢
编辑-PHP
$\u服务器
请求响应

{
  "array": {
    "USER": "apache",
    "HOME": "/usr/share/httpd",
    "SCRIPT_NAME": "/index.php",
    "REQUEST_URI": "/",
    "QUERY_STRING": "",
    "REQUEST_METHOD": "GET",
    "SERVER_PROTOCOL": "HTTP/1.1",
    "GATEWAY_INTERFACE": "CGI/1.1",
    "REMOTE_PORT": "29208",
    "SCRIPT_FILENAME": "/var/www/html/index.php",
    "SERVER_ADMIN": "root@localhost",
    "CONTEXT_DOCUMENT_ROOT": "/var/www/html",
    "CONTEXT_PREFIX": "",
    "REQUEST_SCHEME": "http",
    "DOCUMENT_ROOT": "/var/www/html",
    "REMOTE_ADDR": "172.31.29.19",
    "SERVER_PORT": "80",
    "SERVER_ADDR": "172.31.22.151",
    "SERVER_NAME": "172.31.22.151",
    "SERVER_SOFTWARE": "Apache/2.4.46 ()",
    "SERVER_SIGNATURE": "",
    "PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin",
    "HTTP_ACCEPT_ENCODING": "gzip, compressed",
    "HTTP_USER_AGENT": "ELB-HealthChecker/2.0",
    "HTTP_CONNECTION": "close",
    "HTTP_HOST": "172.31.22.151",
    "proxy-nokeepalive": "1",
    "UNIQUE_ID": "X@7byXAPCfpNYTyp8Hv5xAAAAAQ",
    "FCGI_ROLE": "RESPONDER",
    "PHP_SELF": "/index.php",
    "REQUEST_TIME_FLOAT": 1609489353.920435,
    "REQUEST_TIME": 1609489353
  }
}

<> P>不要编写自己的代码来跟踪谁在请求你的网站,你可以考虑在ELB中使用<代码> X-TuneDeDe><代码>标题来捕获你的客户端IP地址。
这可能对你有帮助。这也可能有所帮助。

AWS中的典型ec2机器将位于AWS公共网络中(在区域内的可用区域内)。面对外部世界(AWS之外),AWS拥有外部/全局IP地址,可以将其分配给ec2机器的接口。但是,在AWS内部,您的计算机和其他计算机位于具有专用IP地址(如172.31.xx.yy)的子网中

您可以通过ssh进入ec2机器并执行
ifconfig
来验证这一点。通过基本网络配置,您可以看到inet地址为172.31.xx.yy的eth0和lo(环回)。因此,您收到来自172.31.yy.zz的请求并不奇怪——这些请求来自AWS云中

你的公共IP地址呢?它只是通过AWS配置与您的ec2机器关联(您可以随时将分配更改为不同的IP地址),AWS拥有NAT/NAPT技术来完成内部和外部IP地址之间的映射


如果您仍然希望阻止来自其他内部机器的这种请求,您可能希望考虑AWS,AWS允许EC2机器在逻辑上孤立的云中自行关闭,从而将机器与其他内部机器的那些讨厌的请求隔离开来。我认为使用专有网络不需要额外收费。有一次,一位客户要求,我们就是这样发现的。事实证明,我们可以很容易地在几分钟内完成设置。

172.31.0.0/16
是默认专有网络的CIDR,如下所示,因此这些请求来自专有网络内部。这就是为什么私有IP可以请求您的网站。

从您的请求中可以看到,您有
“HTTP\u USER\u AGENT”:“ELB HealthChecker/2.0”
,这意味着它来自ELB healthcheck。您可以在下面的链接上阅读有关ALB healthcheck的更多信息:

echo';'打印服务器($);死亡在阵列上打印什么东西请在go check REMOTE_ADDR found或Not之后检查第一步您是否有任何健康检查设置,例如负载平衡器、路由53?我有负载平衡器和路由53是的,它是健康检查器
ELB HealthChecker/2.0
这是健康检查器,它将确保负载平衡器可以与主机对话。它将在内部执行此操作,并根据您的运行状况检查配置按计划运行。