2016-05-31 8 views
1

Основного статического сайта (зеркало) расположено в здании: /home/mirrors/mirrorОбслуживания PHP из подкаталога с помощью Nginx + PHP-FPM

Я пытаюсь настроить 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 sent in stderr: "Unable to open primary script: /home/mirrors/mirror/phpweb/phpweb/index.php

Ближайших к работе конфигурации является неправильным способом задания пути с:

fastcgi_param SCRIPT_FILENAME /home/mirrors/mirror$fastcgi_script_name; 

Что я вижу? Вот вся конфигурация. В основном это работает, за исключением того, что images/css/js не указываются в каталоге phpweb /. Кажется, что в моей конфигурации отсутствуют некоторые строки, которые позволят статике внутри root/home/mirror/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; 
    } 
} 

Here's where I found a config example.

UPDATE: Вот обновленный конфигурации:

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; 
    } 
} 

Какие результаты в:

Warning: include(/home/mirrors/mirror/include/site.inc): failed to open stream: No such file or directory in /home/mirrors/mirror/phpweb/include/prepend.inc on line 78

Warning: include(): Failed opening '/home/mirrors/mirror/include/site.inc' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /home/mirrors/mirror/phpweb/include/prepend.inc on line 78

Warning: include(/home/mirrors/mirror/include/langchooser.inc): failed to open stream: No such file or directory in /home/mirrors/mirror/phpweb/include/prepend.inc on line 81

Warning: include(): Failed opening '/home/mirrors/mirror/include/langchooser.inc' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /home/mirrors/mirror/phpweb/include/prepend.inc on line 81

Warning: include(/home/mirrors/mirror/include/ip-to-country.inc): failed to open stream: No such file or directory in /home/mirrors/mirror/phpweb/include/prepend.inc on line 84

Warning: include(): Failed opening '/home/mirrors/mirror/include/ip-to-country.inc' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /home/mirrors/mirror/phpweb/include/prepend.inc on line 84

Warning: include(/home/mirrors/mirror/include/layout.inc): failed to open stream: No such file or directory in /home/mirrors/mirror/phpweb/include/prepend.inc on line 87

Warning: include(): Failed opening '/home/mirrors/mirror/include/layout.inc' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /home/mirrors/mirror/phpweb/include/prepend.inc on line 87

Warning: include(/home/mirrors/mirror/include/last_updated.inc): failed to open stream: No such file or directory in /home/mirrors/mirror/phpweb/include/prepend.inc on line 92

Warning: include(): Failed opening '/home/mirrors/mirror/include/last_updated.inc' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /home/mirrors/mirror/phpweb/include/prepend.inc on line 92

Warning: include_once(/home/mirrors/mirror/include/releases.inc): failed to open stream: No such file or directory in /home/mirrors/mirror/phpweb/include/branches.inc on line 2

Warning: include_once(): Failed opening '/home/mirrors/mirror/include/releases.inc' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /home/mirrors/mirror/phpweb/include/branches.inc on line 2

Warning: include_once(/home/mirrors/mirror/include/version.inc): failed to open stream: No such file or directory in /home/mirrors/mirror/phpweb/include/branches.inc on line 3

Warning: include_once(): Failed opening '/home/mirrors/mirror/include/version.inc' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /home/mirrors/mirror/phpweb/include/branches.inc on line 3

Fatal error: Call to undefined function mirror_setcookie() in /home/mirrors/mirror/phpweb/index.php on line 44

Ранее (оригинал конфигурации вставили в этом посте) там мы не php ошибок и загрузки страниц. Но изображения/статика были сломаны, как описано выше.

ответ

1

Директива root указывает часть физического пути, который префикс URI, чтобы найти физический файл. См. this document.

Таким образом, в конфигурации, которую вы в курсе, мне кажется, что значение root должно быть одинаковым во всех трех местах:

root /home/mirrors/mirror; 

На самом деле, он является общим для указания root директивы один раз в server и разрешить его унаследовать в каждом месте. Например:

root /home/mirrors/mirror; 
location/{ ... } 
location /phpweb { ... } 
location ~ \.php$ { ... } 
+0

Спасибо. Это то, что у меня было вначале, но это приводит к: Предупреждение: include (/home/mirrors/mirror/include/site.inc): не удалось открыть поток: нет такого файла или каталога в/home/mirror/mirror/phpweb/include/prepend.inc Около 20 из этих строк. Это означало бы, что мне пришлось бы вручную задать путь в коде, предоставленном PHP (http://php.net/mirroring.php). Надеюсь, есть способ настроить Nginx так, чтобы/phpweb/не был опущен? Просто вернулось к вашему варианту конфигурации, но отображаются только ошибки PHP, где, как и в исходной конфигурации над страницей, загружается, но все статики и ссылки опускают/phpweb /. : / – Hayden