我有两台服务器,分别称为 NGinxServer 和 AppServer。NGinxServer 是所有 AppServer 调用的可访问入口点。出于安全原因,我修改了 AppServer 的安全组,使其不允许除来自 NGinxServer 安全组 (NGinxServer-SG) 的连接之外的任何连接。但是,当我这样做时,我无法完成从 Web 浏览器 -> NGinxServer -> AppServer 的任何代理请求。
我可能做错了什么?我以为 NGinx 代理了整个连接,但我只能认为 NGinx 要么正在传递被安全组规则阻止的连接,要么 AWS 看到的代理流量仍然有数据显示它来自 Web 浏览器,而不是 NGinx,并相应地阻止了它。
任何帮助是极大的赞赏。
编辑解决方案:Michael - sqlbot 提供的评论/答案是正确的解决方案。我使用的是公有 IP而不是私有 IP。
答案1
从 VPC 内部访问内部目标时,使用其公共 IP 存在几个问题:
源计算机作为特定安全组成员的身份将丢失,因为流量必须离开您的 VPC 并通过 Internet 网关返回。此时,它不再是“内部”流量。
更糟糕的是,您需要为这些流量离开您的 VPC 付费,然后再为它们再次返回付费。
在大多数地区,这仅相当于约 0.02 美元/GB,支出 0.01 美元/GB,收入 0.01 美元/GB,但这是不必要的成本并且会增加少量延迟。
https://aws.amazon.com/ec2/pricing/on-demand/
还要注意,如果您需要一个无论是内部访问还是外部访问都表现不同的实例的主机名,那么可以使用一些内置的 DNS 魔法。
如果您的实例的公共 IP 地址是 203.0.113.20,并且它的公共 DNS 主机名如下所示:
ec2-203-0-113-20.compute-1.amazonaws.com
然后您可以像这样创建 DNS CNAME:
my-instance.example.com CNAME ec2-203-0-113-20.compute-1.amazonaws.com.
通过此配置,您的my-instance.example.com
主机名将自动解析为私人的IP(如果您在 VPC 内使用),以及民众如果在外部使用,则为 IP。
还要注意,对于私有服务器,您实际上应该将其放在私有子网上,并在其发出访问 Internet 的请求(例如下载更新、设置时钟和访问第三方 API)时使用 NAT 网关或 NAT 实例。
跨可用区内子网边界的流量不会影响性能或收费。流量似乎要经过额外的路由器才能跨子网边界,但实际上并不存在这个路由器——跨可用区内单个 VPC 内的子网的流量实际上不会经过任何额外的设备……因此您的代理可以位于公共子网中,而此 Web 服务器可以位于私有子网中。