Добрый день!
Суть проблемы: есть 2 сервера. Основной - nginx+php-fpm+mysql и дополнительный (другой физический сервер, но в 1 локальной сети) - php-fpm
Идея состоит в том,чтобы часть запросов с конкретных url перенаправить на дополнительный. Таким образом разгрузив основной.
#url который надо обработать на другом сервере
location /cms-new/task-manager {
try_files $uri index.php?$query_string @php-webhost;
}
location @php-webhost {
# include nginxconfig.io/php_fastcgi_webhost.conf;
include fastcgi_params;
fastcgi_index index.php;
fastcgi_buffers 8 32k;
fastcgi_buffer_size 64k;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_pass xxx.xxx.xxx.xxx:9000;
}
#Все остальные обрабатываем на основном
location / {
try_files $uri /index.php?$query_string;
}
location ~ \.php$ {
include nginxconfig.io/php_fastcgi.conf;
fastcgi_read_timeout 600;
}
В результате в php-fpm дополнительного сервера я получаю "GET /cms-new/task-manager/group/list/index.php" 404
И не как не могу настроить обработку этого адреса. Как /cms-new/task-manager/group/list/ передать уже в обработку index.php? Другая проблема, что неизвестно где этот index.php ищется.
Формат upstream мне не подходит, так как нужно конкретный url
UPD Частично разобрался. Заработал такой конфиг
location /cms-new/task-manager {
try_files $uri /index.php?$query_string @php-webhost;
}
location @php-webhost {
rewrite ^/(.*)$ /index.php?$1 break;
# root /home/user/project/public;
include fastcgi_params;
fastcgi_index index.php;
fastcgi_buffers 8 32k;
fastcgi_buffer_size 64k;
fastcgi_param SCRIPT_FILENAME /home/user/project/public$fastcgi_script_name;
#$realpath_root
fastcgi_pass xxx.xxx.xxx.xxx:9000;
}
$realpath_root ведет на туже папку, что и root в корне server. Если раскоментить root в секции location @php-webhost то страницы становятся 404. Работает только так fastcgi_param SCRIPT_FILENAME /home/user/project/public$fastcgi_script_name;
На 2м сервере другой пользователь и путь к проекту отличается.