Обслуживание 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

Предупреждение: включите (/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

Внимание: включите (/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$ { ... }
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]