Обслуживание PHP из подкаталога с использованием nginx + php-fpm
Основной статический сайт (зеркало) находится в: /home/mirrors/mirror
Я пытаюсь настроить сайт PHP только в подкаталоге /home/mirrors/mirror/phpweb/
, Пока он загружает PHP, но все изображения, ссылки на CSS и URL указывают на /home/mirrors/mirror/filename*
вместо /home/mirrors/mirror/phpweb/filename*
Я пробовал с:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Но это приводит к появлению журналов ошибок:
FastCGI отправил в stderr: "Невозможно открыть основной скрипт: /home/mirrors/mirror/phpweb/phpweb/index.php
Наиболее близким к рабочему конфигу является неправильный способ задания пути с помощью:
fastcgi_param SCRIPT_FILENAME /home/mirrors/mirror$fastcgi_script_name;
Что я пропускаю? Вот весь конфиг. В основном это работает за исключением того, что images/css/js не указывают на каталог phpweb /. В моем конфиге, похоже, отсутствуют некоторые строки, которые позволят использовать статические данные в root /home/mirrors/mirror/phpweb; чтобы указать на эту папку.
server {
listen 80;
listen 443 ssl http2;
server_name mirrors.domain.com;
if ($scheme = http) {
return 301 https://$http_host$request_uri;
}
location / {
root /home/mirrors/mirror;
index index.html index.htm;
include /home/mirrors/Nginx-Fancyindex-Theme/fancyindex.conf;
}
location /phpweb {
root /home/mirrors/mirror/phpweb;
index /phpweb/index.php;
}
location ~ /phpweb/.*\.php$ {
root /home/mirrors/mirror/phpweb;
# try_files $uri =404;
# try_files $uri $uri/ =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/mirrors/mirror$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
Вот где я нашел пример конфигурации.
ОБНОВЛЕНИЕ: Вот обновленный конфиг:
server {
listen 80;
listen 443 ssl http2;
server_name mirrors.domain.com;
root /home/mirrors/mirror;
if ($scheme = http) {
return 301 https://$http_host$request_uri;
}
location / {
index index.html index.htm;
include /home/mirrors/Nginx-Fancyindex-Theme/fancyindex.conf;
}
location /phpweb {
index /phpweb/index.php;
}
location ~ /phpweb/.*\.php$ {
try_files $uri =404;
# try_files $uri $uri/ =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# fastcgi_param SCRIPT_FILENAME /home/mirrors/mirror/phpweb$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
Что приводит к:
Предупреждение: include(/home/mirrors/mirror/include/site.inc): не удалось открыть поток: нет такого файла или каталога в /home/mirrors/mirror/phpweb/include/prepend.inc в строке 78
Предупреждение: include(): не удалось открыть /home/mirrors/mirror/include/site.inc для включения (include_path='.:/ Usr/share/php:/usr/share/pear') в / home / mirrors /mirror/phpweb/include/prepend.inc в строке 78
Предупреждение: include(/home/mirrors/mirror/include/langchooser.inc): не удалось открыть поток: нет такого файла или каталога в /home/mirrors/mirror/phpweb/include/prepend.inc в строке 81
Предупреждение: include(): не удалось открыть /home/mirrors/mirror/include/langchooser.inc для включения (include_path='.:/ Usr/share/php:/usr/share/pear') в / home / mirrors /mirror/phpweb/include/prepend.inc в строке 81
Предупреждение: include(/home/mirrors/mirror/include/ip-to-country.inc): не удалось открыть поток: нет такого файла или каталога в /home/mirrors/mirror/phpweb/include/prepend.inc в строке 84
Предупреждение: include(): не удалось открыть файл /home/mirrors/mirror/include/ip-to-country.inc для включения (include_path='.:/ Usr/share/php:/usr/share/pear') в /home/mirrors/mirror/phpweb/include/prepend.inc в строке 84
Предупреждение: include(/home/mirrors/mirror/include/layout.inc): не удалось открыть поток: нет такого файла или каталога в /home/mirrors/mirror/phpweb/include/prepend.inc в строке 87
Предупреждение: include(): не удалось открыть /home/mirrors/mirror/include/layout.inc для включения (include_path='.:/ Usr/share/php:/usr/share/pear') в / home / mirrors /mirror/phpweb/include/prepend.inc в строке 87
Предупреждение: include(/home/mirrors/mirror/include/last_updated.inc): не удалось открыть поток: такого файла или каталога нет в /home/mirrors/mirror/phpweb/include/prepend.inc в строке 92.
Предупреждение: include(): не удалось открыть /home/mirrors/mirror/include/last_updated.inc для включения (include_path='.:/ Usr/share/php:/usr/share/pear') в / home / mirrors /mirror/phpweb/include/prepend.inc в строке 92
Предупреждение: include_once(/home/mirrors/mirror/include/releases.inc): не удалось открыть поток: нет такого файла или каталога в /home/mirrors/mirror/phpweb/include/branches.inc в строке 2
Предупреждение: include_once(): не удалось открыть /home/mirrors/mirror/include/releases.inc для включения (include_path='.:/ Usr/share/php:/usr/share/pear') в / home / mirrors /mirror/phpweb/include/branches.inc в строке 2
Предупреждение: include_once(/home/mirrors/mirror/include/version.inc): не удалось открыть поток: нет такого файла или каталога в /home/mirrors/mirror/phpweb/include/branches.inc в строке 3
Предупреждение: include_once(): не удалось открыть /home/mirrors/mirror/include/version.inc для включения (include_path='.:/ Usr/share/php:/usr/share/pear') в / home / mirrors /mirror/phpweb/include/branches.inc в строке 3
Неустранимая ошибка: вызов неопределенной функции mirror_setcookie() в /home/mirrors/mirror/phpweb/index.php в строке 44
Ранее (оригинальный конфиг вставлен в этот пост) там у нас нет ошибок php и страница загружается. Но изображения / статика были сломаны, как описано выше.
1 ответ
root
Директива указывает часть физического пути, которая имеет префикс к URI для поиска физического файла. Смотрите этот документ для деталей.
Так что в конфигурации, которую вы разместили, мне кажется, что значение для root
должно быть одинаковым во всех трех местах:
root /home/mirrors/mirror;
На самом деле, обычно указывается root
директива один раз в server
заблокировать и позволить ему наследоваться в каждом месте. Например:
root /home/mirrors/mirror;
location / { ... }
location /phpweb { ... }
location ~ \.php$ { ... }