Magento将PHP-FPM组分开给管理员

时间:2014-10-28 02:53:11

标签: magento nginx php

我运行一个具有中等流量水平的Magento网上商店,使用PHP-FPM在NGINX上运行。服务器环境非常强大且开销很大,因此硬件不是一个因素。

在后端运行内存密集型操作时,我们遇到超时和错误,例如导出和一些自定义索引。

忽略编写更高效的代码并增加整个站点的池大小,我们希望探索为后端分配更多资源的方法,而不必减少整个站点可能的并发连接大小。

有人建议我们将网站的管理员拆分为一个单独的服务器/ IP,具有不同的配置。这将解决我们的问题,但也非常昂贵,似乎是解决非关键问题的一个重大飞跃。

是否可以将不同的PHP FPM配置与www.example.com/admin相关联,从而为不同URL的用户提供不同的功能?

3 个答案:

答案 0 :(得分:4)

是的,这是可能的。

在此示例中,我们指定默认池,池1.如果URL为/ admin,我们将使用池2。

http {
    # The usual..

    # PHP FPM/FastCGI server
    upstream    php5p1 { server unix:/var/run/php5-fpm-pool-1.sock; }
    upstream    php5p2 { server unix:/var/run/php5-fpm-pool-2.sock; }
}

server {

    # Default is to use pool 1
    set $custom_php_pool    "1";

    # If is /admin, we use pool 2
    if ($uri ~* "^/admin/") {
        set $custom_php_pool        "2";
    }

    # ...


    location ~ \.php$ {

        # ...

        # Pass to PHP FPM/FastCGI server
        if ($custom_php_pool = '1') { fastcgi_pass php5p1; }
        if ($custom_php_pool = '2') { fastcgi_pass php5p2; }
    }
}

答案 1 :(得分:1)

在演示多池PHP-FPM设置时,在概念上正确的答案是正确的。但是,提供的Nginx配置依赖于IF指令considered slow and unsafe

取决于URL的多个PHP-FPM池的最佳Nginx配置:

http {
    upstream fastcgi_www {
        server unix:/var/run/php-fpm.sock;
    }

    upstream fastcgi_admin {
        server unix:/var/run/php-fpm-admin.sock;
    }

    map $request_uri $fastcgi_backend {
        default                 fastcgi_www;
        ~^(/index\.php)?/admin  fastcgi_admin;
    }

    server {
        # ...
        fastcgi_pass   $fastcgi_backend;
        # ...
    }
}

Magento 2附带的Nginx配置nginx.conf.sample可以在替换所有出现的FastCGI pass指令之后使用:

fastcgi_pass   fastcgi_backend;

其变量取决于请求URL:

fastcgi_pass   $fastcgi_backend;

另存为nginx.conf.sample的修改后的/var/www/magento2/nginx.conf可以照常重复使用:

http {
    # ...
    server {
        # ...
        include /var/www/magento2/nginx.conf;
    }
}

答案 2 :(得分:1)

您确定php是您的限制因素吗? 以我的经验,它主要是数据库,它带有锁定等待超时。 在这种情况下,添加更多的php进程对您没有帮助。