我在 Nginx 反向代理后面有一个 Web 服务器。当我使用来自同一内部网络的客户端通过其安全 URL 访问服务器时,如何确保流量路由保持在内部网络内。在我看来,流量流出、通过公共互联网并返回内部网络是没有意义的。
答案1
您的帖子缺少很多信息。
我认为您的意思是您的网络服务器是通过 NATted 地址从互联网访问的,并且 DNS 记录指向该公共地址。并且您希望在从 LAN 内部访问服务时使用相同的 DNS 名称。此外,如果您的 LAN 有多个 IP 子网,则对此的任何讨论都会变得更加复杂 - 所以我假设情况并非如此。
nginx 反向代理的额外复杂性与您如何从浏览器访问服务无关。您只想使用指向(尽管是间接的)代理而不是原始服务器的 DNS 名称连接到服务。
LAN 内部的连接将不是上网(除非你的路由器出了什么问题)。应该可能发生的情况是请求将发送到路由器并被发送回 LAN。但是,可以想象路由器可能已配置显式 ACL,但缺少允许从子网连接到公共网络地址的 ACL - 在这种情况下,除非您修复遗漏,否则您将无法连接。但这是一种非常不寻常的极端情况。
通过路由器确实意味着有一个额外的网络跳转,可能会给网络流量增加一毫秒的延迟。您实际上不会注意到这一点。但这确实意味着对服务的访问取决于路由器是否正常运行,并且路由器上的统计信息收集可能会受到影响。
正如其他人所说,在这种情况下使用拆分 DNS 是很常见的。您只需确保 LAN 上的所有客户端都指向声称对您的服务域具有权威性的 DNS 服务器即可。
一个更简单但可扩展性较差的解决方案是在客户端的 hosts 文件中添加一个条目来覆盖默认 DNS 数据。
一些更复杂的路由器提供拦截和重写进入网络的 DNS 数据包以替换 NAT 地址的功能(思科称此技术为 DNS 篡改)。但如果这适用于您的环境,那么您已经拥有一支现场网络工程师团队,他们将知道如何提供此功能。
在没有任何理由采取不同措施的情况下,我建议采用第一个选项,并将流量从路由器上反弹。
答案2
当我使用来自同一内部网络的客户端通过其安全 URL 访问服务器时,如何确保流量路由保持在内部网络内。
只需使用服务器的私有 IP 地址进行访问,不要通过任何您不想要的东西路由该地址。
如果使用反向代理的公共名称访问服务器,则需要实现水平分割/脑裂 DNS在您的专用 LAN 的 DNS 服务器上。对于来自专用网络的查询,将名称解析为 Web 服务器的专用 IP 地址。对于来自开放 Internet 的查询,解析方式与之前相同。