ProxyPass 是好的做法吗

ProxyPass 是好的做法吗

我怀疑是否mod_proxy是一个很好的做法,因为我有一个 apache http 服务器,它可以提供我的应用程序资源 html/css/jss,对于特定的 url,我使用 ProxyPass 到外部 IP。例如 url 如下:a.example.com/index.html从等加载资源c:/htdocs/a/index.html...

但是对于所有以 结尾的 URL,/api我有 ProxyPass 配置,例如,a.example/api/我有 ProxyPass /api http://external-server-ip.com:8802/api connectiontimeout=10 timeout=2400

所有这些都有效,但我怀疑这是否是好的做法?因为实际上似乎我的所有 REST/api/...请求都经过 apache,然后 apache 将它们发送到http://external-server-ip.com:8802/api这个外部服务器,然后 apache 向我发送响应?这看起来很繁重而且很糟糕,不是吗?

这是常见行为吗:保持相同的域名 + 从相同的 http 服务器加载资源,但对于所有 REST 请求,根据“子域”发送 + 获取代理传递到外部 ip

更新:我将 /api 全部代理到安装在不同云服务器上的不同后端服务器(这些服务器是我的),但我只希望所有客户端的域名都是 client-name.MYURL.com

我在云服务器 1 上有一些客户端,在其他云服务器 2 上也有其他客户端,例如:

client-1.MYURL.com/api直到client-1000.MYURL.com/api通过代理传递到云服务器 ip xxxx:x

直到从云服务器 ip yyyy:y 获取client-1000.MYURL.com/api数据client-2000.MYURL.com/api

等等...另一个案例是我想通过访问具有 ip zzzz:z 的 test.MYURL.com 创建对我的本地服务器测试的访问

这里所有的外部 IP 都是我在不同地方/机器/服务器上的后端服务器。

我用mod_macro通过为每个客户端创建虚拟主机来实现这一点,这一切都有效,问题是最佳实践以及如何仅保留一个域名,但根据子域重定向到选定的服务器,这允许我为所有客户端只有一个域名+一个 wldcard ssl 证书等

答案1

在应用服务器前运行一个普通的 Web 服务器是适当的关注点分离,通常也是最佳做法。

您的应用服务器通常是为特定业务目的而编写的,除非有令人信服的理由导致无法使用 Web 服务器,否则在其中添加不必要的东西通常被认为是浪费时间和金钱。(这种情况很少见,但确实会发生,这就是为什么大多数语言/Web 框架都有用于 TLS 之类的中间件。)

Web 服务器本身的功能更加全面,可以完成各种原本需要添加到应用服务器的功能,或者 Web 服务器可以做得更好的功能,例如基于 IP 的访问控制、WAF、提供静态资产、缓存、基本负载平衡等等。

不寻常的是代理传递到不受您控制的应用服务器,或通过不受您控制的网络。如果您通过互联网或其他不受信任的网络加载内容,您确实应该使用 HTTPS。这是应用服务器确实需要包含 TLS 中间件的一种情况。

相关内容