Я изо всех сил пытаюсь заставить NGINX и PHP-FPM эффективно общаться. Мой файл конфигурации NGINX содержит следующее определение для api
смещение:
location /api {
try_files $uri /api/index.php$is_args$args;
gzip off;
fastcgi_pass PHP:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_keep_conn off;
include fastcgi_params;
}
и на моей машине PHP у меня есть следующая конфигурация пула:
[api]
listen = 9000
user = www-data
group = www-data
pm = dynamic
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 5
pm.status_path = /status
Затем я подключаю файл журнала сервера NGINX и, когда нажимаю на веб-сервер:
http://localhost/api
# or
http://localhost/api/index.php
# or ...
http://localhost/api/resources.json
Я могу видеть из журнала сервера NGINX, что NGINX правильно соответствует /api
шаблон, но я получаю следующие ошибки:
[ошибка] 14 # 0: * 1 FastCGI отправлено в stderr: «Невозможно открыть основной скрипт: /app/html/websites/couchbase/api/index.php (нет такого файла или каталога)»
Где находится корневой каталог на машине PHP /app/html/websites/couchbase
, Я в полном недоумении, что на самом деле означает эта ошибка или, что более важно, как ее отладить. Любая помощь будет принята с благодарностью.
постскриптум Я пробовал заменить $document_root
ссылка в fast_cgi_param на жестко закодированные значения, чтобы увидеть, если это имеет значение. Это означает, что если я укажу на неверный каталог, это даст мне
No input file specified.
ошибка. Единственное место, где я получаю ошибку, это когда она, по-видимому, указана в нужном месте.
Добавил это в случае, если это поможет прояснить … это файловая система в /app/html/websites/couchbase/api
на машине PHP / FPM.
Я создал test.php
файл, который в основном просто эхо «ОК» назад, но это работает не лучше, чем основная цель запуска index.php
,
примечание: я не был уверен, важны ли разрешения на выполнение — как вы можете видеть
test.php
они не указаны на картинке — но я пробовал их в обоих направлениях, и, похоже, это не имеет значения.
Ошибка жалуется на файл index.php, не найденный в корневом каталоге. Это под ...couchbase/api
или находится под .../couchbase
? Во втором случае вы можете исправить эту проблему с помощью перенаправления.
Я думаю, что вы можете двигаться try_files
вне location
блок. Я никогда не пользовалась $is_args
а также $args
в этом виде перенаправления, и я не проверял это, но ИМХО, я думаю, вы можете удалить его.
Я думаю, что вы можете решить эту проблему с помощью этой конфигурации:
root /app/html/websites/couchbase;
try_files $uri /api/index.php$is_args$args;
location /api {
rewrite /api/(.*) $1 break;
gzip off;
fastcgi_pass PHP:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_keep_conn off;
include fastcgi_params;
}
У вас может быть более чистый файл конфигурации, если вы включите следующие директивы:
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_keep_conn off;
внутри fastcgi_params
файл.
Других решений пока нет …