[英]Magento separate PHP-FPM group for admin
我运行一个中等流量水平的 Magento 网络商店,在 NGINX 上运行,使用 PHP-FPM。 服务器环境非常强大,有很多开销,所以硬件不是一个因素。
在后端运行内存密集型操作(例如导出和一些自定义索引)时,我们会遇到超时和错误。
忽略编写更高效的代码和增加整个站点的池大小,我们希望探索将更多资源分配给后端的方法,而不必减少站点中可能的并发连接大小。
有人建议我们将站点的管理员拆分为具有不同配置的单独服务器/IP。 这将解决我们的问题,但也非常昂贵,而且似乎是解决非关键问题的一大飞跃。
是否可以将不同的 PHP FPM 配置与 www.example.com/admin 之类的内容相关联,从而为来自不同 URL 的用户提供不同的功能?
是的,这是可能的。
在这个例子中,我们指定了一个默认池,池 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; }
}
}
接受的答案在演示多池 PHP-FPM 设置时在概念上是正确的。 但是,提供的 Nginx 配置依赖于被认为是慢速和不安全的IF 指令。
取决于 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;
# ...
}
}
在替换所有出现的 FastCGI pass 指令后,可以使用 Magento 2 附带的 Nginx 配置nginx.conf.sample :
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;
}
}
您确定 php 是您的限制因素吗? 根据我的经验,它主要是数据库,它提出了锁定等待超时。 在这种情况下,添加更多 php 进程对您没有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.