Я провел небольшое исследование по запуску NGinx и PHP с FastCGI на отдельных серверах и успешно установил его на тестовых виртуальных машинах. Я столкнулся с проблемой, описанной в этих статьях ...
... то есть для того, чтобы эта настройка работала, файлы PHP должны находиться в одном каталоге на ОБЕИХ серверах, даже если машины, на которых запущен рабочий php-fpm, фактически выполняют сценарии. Я сам это тестировал; если я удалю файл test.php в корне документа на сервере NGinx, он выдаст ошибку 404 или 403, даже если файл все еще существует на машине PHP-FPM.
Мой вопрос: нет ли выхода? Я знаю, что использование центрального хранилища под управлением NFS - одно из решений, но я бы хотел избежать связанных с этим проблем с производительностью.
Если это поможет, вот мои файлы конфигурации:
/etc/nginx/sites-enabled/test-app.conf
upstream test-app {
server <php-fpm-server-ip>:9001;
}
server {
listen 80;
listen [::]:80;
server_name test.app.com;
root /var/www/html;
index index.php index.html index.htm;
location ~ \.php$ {
try_files $uri $uri/ =404;
fastcgi_pass test-app;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Если вы действительно хотите это сделать, удалите это из nginx в папке \ .php:
try_files $uri $uri/ =404;
Это то, что заставляет его проверять файловую систему перед передачей запроса в восходящий поток fcgi. Также убедитесь, что для процесса fcgi правильно настроен корневой каталог, поэтому он не может читать случайные файлы php теперь, когда nginx не может выполнять проверку существования.
Файлы php должны существовать как на сервере nginx, так и на сервере php-fpm. В противном случае nginx вернет страницу 404, которая не найдена.
Вам необходимо синхронизировать все файлы с локального сервера nginx (файл должен существовать, но может иметь 0 байт в содержимом) и внутреннего php-сервера (фактические скрипты php)
Или вы можете обмениваться файлами между серверами, используя SSHFS, другой - NFS. Вы помещаете php-скрипт в локальную папку (сервер php-fpm), затем монтируете эту папку на сервер nginx. В корне документа nginx.conf вы указываете его на смонтированную папку. Вот и все, файлы синхронизировать не нужно.