Ошибка "FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream" говорит о том, что Nginx не может найти указанный в файле конфигурации скрипт, речь про эту строку:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Рекомендация тут простая - проверьте все пути и убедитесь, что все нужные файлы существуют и лежат на своих местах.
Конкретно в Вашем случае я не вижу определения директивы root за пределами location / или в нем.
Если вы не можете разобраться, в каком каталоге Nginx ищет нужный скрипт, то на узле vh2_fphp7.0 запускаете:
tcpdump port 9000 -A | strings
Вывод покажет всю нужную информацию, в том числе путь к скрипту.
Так же можно включить логирование:
http {
...
log_format scripts '$document_root$fastcgi_script_name > $request';
server {
...
access_log /var/log/nginx/mysite-scripts.log scripts;
...
}
}
Так же возможно вы неправильно написали регулярку в директиве fastcgi_split_path_info,
см. оф. документацию.
Так же проверьте значение cgi.fix_pathinfo = 1 (в некоторых мануалах советуют cgi.fix_pathinfo = 0 что может привести к не правильной обработке переменной PHP_SELF не равной DOCUMENT_URI).
Кстате строки
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
по моему абсолютно излишни, уберите их или используйте try_files.
Я конечно понимаю, что
сами разработчики Nginx в этой статье написали так..., но....
location ~ \.php$ {
try_files $uri = 404;
fastcgi_pass 127.0.0.1:9001;
include /etc/nginx/fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}