Я написал сценарий, который копирует файлы и базу данных magento с нашего производственного сервера и пытается настроить их на поддомене на нашем тестовом сервере.
Каждый тестовый сайт имеет: - уникальный поддомен - работает под уникальным пользователем, указанным в пуле php-fpm
Вот конфигурация пула php-fpm:
[test1]
user = test1
group = test1
listen = /run/php/php7.0-test1-fpm.sock
listen.owner = www-data
listen.group = www-data
Поэтому я бы настроил следующие сайты под разными пользователями, например:
[test2]
user = test2
group = test2
listen = /run/php/php7.0-test2-fpm.sock
listen.owner = www-data
listen.group = www-data
Проблема возникает, когда я пытаюсь скопировать серверный блок magento nginx (сокращенная версия вставлена ниже):
upstream fastcgi_backend {
server unix:/run/php-fpm/php-test1-fpm.sock;
}
server {
listen 80;
server_name test1.magento-dev.com;
set $MAGE_ROOT /usr/share/nginx/html/test1;
include /usr/share/nginx/html/test1/nginx.conf.sample;
}
Если я продублирую конфиг так:
upstream fastcgi_backend {
server unix:/run/php-fpm/php-test2-fpm.sock;
}
server {
listen 80;
server_name test2.magento-dev.com;
set $MAGE_ROOT /usr/share/nginx/html/test2;
include /usr/share/nginx/html/test2/nginx.conf.sample;
}
Я получаю сообщение об ошибке, потому что upsteam fastcgi_backend уже определен. Я прочитал документацию nginx для восходящего потока, и в нем говорится, что это пул серверов, но я действительно не понимаю, что здесь происходит, чтобы указать восходящий поток, подобный этому, для передачи запросов php.
Что я делаю не так? Как мне настроить несколько сайтов magento на поддоменах, работающих под разными пользователями?
Как я это исправил:
Я переименовал восходящий поток, но не осознавал, что имя восходящего потока используется в proxy_pass. Вам нужно отредактировать proxy_pass в nginx.conf.sample в корне Magento.
Вот как я настроил несколько пулов с помощью Nginx и PHP 5.6. Я не использую пути, я использую сокеты. Я немного отредактировал свои файлы, чтобы сделать их более общими, поэтому, если что-то не подходит, предполагайте, что это опечатка.
/etc/php-fpm-5.6.d/pool1
[pool1]
listen = 127.0.0.1:9000
/etc/php-fpm-5.6.d/pool2
[pool2]
listen = 127.0.0.1:9001
/etc/nginx/upstreams.conf
upstream php56-pool1 {
server 127.0.0.1:9000;
}
upstream php56-pool2 {
server 127.0.0.1:9001;
}
Вот соответствующие части моих блоков местоположения Nginx.
/etc/nginx/site1.conf
location ~ \.php$ {
fastcgi_pass php56-pool1;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
}
/etc/nginx/site2.conf
location ~ php$ {
fastcgi_pass php56-pool2;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}