apache - 配置 HAProxy+nginx+PHP-FPM 以超越 Apache+mod_php

标签 apache nginx haproxy php

编辑

在 VirtualBox 上运行我的操作系统是个问题。当我将我的操作系统设为磁盘上的本地操作系统后,我就能看到性能提升。

原创

我读到很多人建议放弃 Apache+mod_php,转而使用 HAProxy+nginx+PHP-FPM。我正在尝试验证它是否是一个更有效的设置,但没有看到人们描述的结果。 siege 和 ab (Apache Benchmark) 都表明 Apache 在任何数量的并发连接下每秒都能提供更好的响应,并且可以支持更多连接。

我在 VirtualBox 上运行 Ubuntu 11.04 服务器。它有 10 GB 的空间和 1,344 兆的内存。我使用 apt-get 来安装上面提到的程序。以下是相关配置文件,仅包含重要部分。

haproxy.cfg

global
        maxconn 4096
        user haproxy
        group haproxy
        daemon
        stats socket /var/run/haproxy.sock mode 0600 level admin

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option  redispatch
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000

listen tcpcluster *:80
        mode tcp
        option tcplog
        balance roundrobin

        server tcp01 192.168.1.199:8080 check

nginx.conf

worker_processes 2;

events {
        worker_connections 768;
}

www.conf

pm = dynamic
pm.max_children = 10
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 500

apache.conf

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients           10
    MaxRequestsPerChild   0
</IfModule>
<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients           10
    MaxRequestsPerChild   0
</IfModule>
<IfModule mpm_event_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients           10
    MaxRequestsPerChild   0
</IfModule>

鉴于 PHP-FPM 和 Apache 都有最多 10 个子级,我希望任何速度优势都是可见的。在我运行的每个测试中(在我运行测试之前总是等到负载为 0.01),Apache 总是能够更有效地处理更多请求。

是否可以进行一些其他优化,以便最适合扩展的设置优于不应该更有效的设置?

最佳答案

使用 haproxy 作为连接集中器:使用“mode http”而不是“mode tcp”,使用“option http-server-close”并将服务器 maxconn 值设置为远低于 worker connections 值。您应该跨越一个点,在这个点上,较低的并发性带来了更高的性能,同时整个链的 RAM 使用率更低,缓存效率更高。

顺便说一句,我们正在谈论的数字是多少?他们以每秒数百或数千个请求来衡量吗?因为很明显,应用服务器只有在负载较高时才会真正发挥作用。显然,如果应用程序运行速度非常慢,则没有理由在更换服务器时看到差异。

关于apache - 配置 HAProxy+nginx+PHP-FPM 以超越 Apache+mod_php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12056861/

相关文章:

apache - Apache 配置中的 "Accept-EncodXng"是什么?

configuration - 如何在 nginx 中重用服务器配置?

php - 全新安装时出现 "Error in exception handler"

nginx 在请求路径时返回一个文件

docker - HaProxy 用于马拉松 mesos docker 链接容器上的服务发现

angularjs - 如何在一个IP地址中托管多个docker化网站(nginx)?

java - ooxml 架构、IntelliJ IDEA 和 NullPointerException

apache - Jenkins + Apache + SSL = 无可用更新

apache - 配置为使用HBase运行Hadoop

http - 哪个开源负载均衡器支持 SPDY?