[英]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.