如何为几个Web应用程序和静态内容设置反向代理?

更新:基于Jesper Mortensen的回应,这里是一些更多的信息。 这些应用程序基于Perl的HTTP :: Daemon 。 我打算在Linux服务器上部署它们。

每个应用程序做一些不同的 因此,这不是真正的负载平衡,因为服务器是不可互换的。 我比Apache更熟悉Apache,但是我从来没有configuration过代理。

考虑一个Web应用程序监听单个端口的情况(比如80808888 )。 由这些应用程序输出的HTML在任何时候都是dynamic的和用户特定的,所以它不应该被caching,但是它们将使用一组公用的图像,CSS和JavaScript文件。

是否有可能在www.example.com:80侦听服务器localhost:8000 www.example.com:80将请求redirect到静态内容localhost:8000localhost:8080localhost:8888分别针对特定于应用程序的请求? 此外,有可能使用https为外部www.example.com而端口80808888服务器使用http

我一直在阅读实用mod_perl和鱿鱼示例中的 第12章 ,它看起来应该是可能的,但这是我第一次研究代理和反向代理,因此我不知道应该如何继续,我不确定术语,所以任何指针/更正将不胜感激。

是的,这是可能的,甚至是相当标准的function。 你不提供关于你的服务器环境的细节,不幸的是…

您可以区分请求的许多部分的网站; 但经典当然要区分每个网站的完全合格的域名 ,即sitename1.somedomain.com,sitename2.somedomain.com,sitename3.com等等。

使用mod_perl和Squid听起来像是在Unix上。 Apache的mod_rewrite可能是在Unix上实现这一点的最常见/最古老的方式。 请注意,掌握mod_rewrite设置安全代理需要一些工作。 (如果你设置了一个不安全的代理服务器,它将允许代理服务器的“外部”代理请求,而垃圾邮件发送者可能会滥用这个来从你的IP地址做表单提交等)。

Unix上的另一个常见方法是在公共IP上(即接收来自用户的请求)具有“轻量级”的HTTP服务器/代理,然后让“轻量级”服务器将请求扇出为“较重” Apache / PHP / Perl / Python实例。 好处是可以更高效地处理许多打开的连接,并减less服务器上RAM的使用。 nginx(EngineX)是一个stream行的服务器,它也有一个重写模块 。

关于在“第一”networking服务器上处理HTTPS / SSL; 是的,这是一个很好的解决scheme。 您只需像常规那样设置SSL,并将该主机名的Web服务器代理请求发送到后端服务器。 编辑:通常,前端“HTTPS加速器”将HTTP头(X-Forwarded-Proto)添加到后端请求中,以便后端应用程序可以通过encryption连接知道原始请求

您在这里看到的是HTTP负载平衡的子情况; 即,您正在一台计算机上安装HTTP代理,并使用它来扇出请求到同一台计算机上的其他HTTP服务器。 Unix系统有很多很好的软件负载平衡器 。

如果你在Windows上,那么微软的新的“ 应用程序请求路由 ”是相当不错的。 版本2现在处于最佳状态,并且比版本1有了很大的改进 – 在iis.net网站上find它。 编辑:应该说,从来没有版本的IIS是相当快速和可扩展的。 大多数IIS用户不需要为单个IIS服务器设置一个HTTP代理,他们只是在IIS服务器上创build具有适当应用程序模型的虚拟主机。

我认为你是对的。 我不知道如何通过Perl或鱿鱼做到这一点,但我通过Apache正在做这件事。 这是我的configuration:

 <VirtualHost *:443> ProxyPass /doc http://127.0.0.1:81/gdoc ProxyPassReverse /doc http://127.0.0.1:81/gdoc ProxyPass /rp01 http://server01.mydomain.local/rp01 ProxyPassReverse /rp01 http://server01.mydomain.local/rp01 ProxyPass /bugzilla http://bugzilla.mydomain.local ProxyPassReverse /bugzilla http://bugzilla.mydomain.local </VirtualHost>