gpt4 book ai didi

apache - 我可以在 Prefork MPM 下使用 Apache mod_proxy 作为连接池吗?

转载 作者:行者123 更新时间:2023-12-04 20:18:30 26 4
gpt4 key购买 nike

摘要/问题:

我使用 Prefork MPM 运行 Apache,运行 php。我正在尝试使用 Apache mod_proxy 创建一个反向代理,我可以通过它重新路由我的请求,以便我可以使用 Apache 进行连接池。示例实现:

在 httpd.conf 中:

SSLProxyEngine On
ProxyPass /test_proxy/ https://destination.server.com/ min=1 keepalive=On ttl=120

但是当我运行我的测试时,这是循环中的以下命令:
curl -G 'http://localhost:80/test_proxy/testpage'

它似乎没有重新使用连接。

进一步阅读后,听起来我没有获得连接池功能,因为我使用的是 Prefork MPM 而不是 Worker MPM。因此,每次我向代理发出请求时,它都会使用自己的连接池(大小为 1)启动一个新进程,而不是使用维护自己的连接池的单个工作程序。这样的解释对吗?

背景信息:

有一个外部服务器,我通过 https 向我运行的站点上点击的每个页面发出请求。

协商 SSL 握手的成本越来越高,因为我使用 php 并且它似乎不支持连接池 - 如果我的站点收到 300 个页面请求,他们必须对外部服务器进行 300 次 SSL 握手,因为连接已关闭在每个脚本完成运行后。

因此,我尝试在 Apache 下使用反向代理作为连接池,以保持跨 php 进程的连接,因此我不必经常进行 SSL 握手。

给我这个想法的来源:
  • http://httpd.apache.org/docs/current/mod/mod_proxy.html
  • http://geeksnotes.livejournal.com/21264.html
  • 最佳答案

    首先,您的测试方法无法演示连接池,因为对于每次调用,都会产生一个 curl 客户端,然后它就会消失。就像死人不会说很多话一样,死进程不能保持连接活着。

    您的客户端会打扰您的代理服务器。

    Client ====== (A) =====> ProxyServer

    我们称此连接为 A。您的代理服务器什么也不做,只是一个炫耀。英俊勤奋的服务员谦虚到躲在后面。
    Client ====== (A) =====> ProxyServer ====== (B) =====> WebServer

    在这里,如果我没猜错的话,安全连接是 A,而不是 B,对吗?

    重复我的第一点,在您的测试中,您正在为每个请求创建一个单独的客户端。每个客户端都需要一个单独的连接。连接是发生在至少两方之间的事情。一侧离开并且连接丢失。

    好的,让我们现在忘记 curl 并一起看看我们真正想要做什么。

    我们希望在 A 上使用 SSL,并且希望 A 端的流量尽可能快。为了这个目的,我们已经把 B 边分开了,所以它不会让 A 更慢,对吧?

    连接池? A 没有连接池这样的东西。每个客户端来来去去都会制造很多噪音。唯一可以帮助您减少这种噪音的是“Keep-Alive”,这意味着从 保持连接处于事件状态。 客户端一段很短的时间,因此这个客户端可以请求此请求所需的其他文件。当我们完成时,我们就完成了。

    对于 B 上的连接,连接将被池化;但这不会给您带来任何性能,因为在单服务器设置中,您没有这部分噪音产生。

    我们如何帮助这个系统运行得更快?

    如果这两个服务器在同一台机器上,我们应该摆脱炫耀的服务器并继续使用我们辛勤工作的网络服务器。它给系统增加了很多不必要的工作。

    如果这些是单独的机器,那么您至少可以从这个可怜的家伙那里获得加密(对于 ssl)负载,从而对 Web 服务器很好。然而,你可以变得更好。

    如果您想继续使用 Apache,请从 mpm_prefork 切换到 mpm_worker。在 300 多个并发请求的情况下,这将工作得更好。我真的不知道你的硬件容量;但是如果处理 300 个请求很困难,我相信这个小小的改变会对你的系统有很大帮助。

    如果你想要一个更轻量级的系统,可以考虑使用 nginx 作为 Apache 的替代品。很 easy to setup与 PHP 一起工作,它将有更好的性能。

    除了前端方面,还要考虑检查您的数据库服务器。连接池将在这里产生真正的影响。确保您的 PHP 安装配置为重复使用到数据库的连接。

    此外,如果您在同一系统上托管静态文件,请将它们移出另一台 Web 服务器,或者通过将静态文件移至具有 CDN 的云系统(如 AWS 的 S3)做得更好。 + CloudFrontRackspace's CloudFiles .即使没有 CloudFront,S3 也会让您满意。 Akamai 附带 Rackspace 的解决方案!

    去掉静态文件会让你的网络服务器“哦,发生了什么,这是什么静默?哦,天堂!”因为您提到这是一个网站,并且大多数时候网页对于每个动态生成的 html 页面都有许多静态文件。

    我希望你能从杀手工作中拯救这个可怜的家伙。

    关于apache - 我可以在 Prefork MPM 下使用 Apache mod_proxy 作为连接池吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9221640/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com