【发布时间】:2023-08-24 12:21:01
【问题描述】:
我们已经构建了一个车辆跟踪系统 (VTS) 设备。我有一个 PHP 脚本来监听客户端连接。
当我们使用 EC2 实例的私有 IP 连接时建立了连接,但是当我们尝试在 php 脚本中放置外部 IP 或公共 IP 时,它会显示错误。
我该如何解决这个问题??
我已经使用 Amazon EC2 启动了一个 Linux 虚拟机。然后使用 putty 从 Windows 连接到 Linux 实例。有一个 php 脚本可以监听传入的连接。当我放置 EC2 的私有 IP 时,它会连接,但是当我放置公共 IP 时,它会抛出错误“无法绑定 ip[99]”
public function __construct($bind_ip,$port)
{
set_time_limit(0);
$this->hooks = array();
$this->config["ip"] = $bind_ip;
$this->config["port"] = $port;
$this->master_socket = socket_create(AF_INET, SOCK_STREAM, 0);
socket_bind($this->master_socket,$this->config["ip"],$this->config["port"]) or die("Issue Binding");
socket_getsockname($this->master_socket,$bind_ip,$port);
socket_listen($this->master_socket);
SocketServer::debug("Listenting for connections on {$bind_ip}:{$port}");
}
我们想从车辆跟踪设备获取数据。我们可以为该设备设置 IP 地址并将其放入 PHP 脚本中,但是当我使用公共 IP 运行它时,它会抛出错误“无法绑定 ip[99]”
【问题讨论】:
-
所见即所得。 EC2 不会将外部公共 IP 暴露给实例的 IP 堆栈;相反,公共 IP 由 Internet 网关转换为私有 IP,它会自动进行静态 1:1 NAT,无需单独配置。绑定到内部地址或所有接口(例如
0.0.0.0)是正确的,并且如果您的 VPC 网络设置都正确,仍然允许您接受到外部 IP 的连接。请确认:绑定私网IP后,还能连接公网IP吗?你应该,如果是这样,那么设置是正确的。
标签: php amazon-web-services amazon-ec2 ip-address serversocket