Назад | Перейти на главную страницу

Конфигурация nginx для нескольких подкаталогов, содержащих файлы zf2 / php, не работает

Моя корневая структура выглядит так

/ корень / / корень / проектA / ... / корень / проектB / ... / корень / проектC / ...

Раньше я настраивал каждый из своих подкаталогов с одним дополнительным блоком местоположения в моем файле nginx. Эти «блоки» локации выглядели так:

server {
listen   80;
listen   [::]:80;

root /usr/share/root/projectA/public/;
index index.php index.html index.cgi;

server_name www.test.de;

location / {        
    try_files $uri $uri/ /index.php?$args;      
}

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;       
    fastcgi_index index.php;
    include fastcgi_params;
}

}

Таким образом, мое приложение ZF2, находящееся в / root / projectA, работало должным образом. Но по мере роста числа подпроектов я хотел использовать универсальное решение для регулярных выражений, поэтому мне не приходилось писать один и тот же блок снова и снова для каждого подкаталога.

Итак, это был мой подход к тому, чтобы эти проекты были доступны в поддомене vendor.test.de, причем каждый проект доступен в vendor.test.de/projectA / ...:

server {
listen   80;
listen   [::]:80;

root /usr/share/root/;
index index.php index.html index.cgi;

server_name vendor.test.de;

rewrite_log on;
error_log /var/log/nginx/debug.log debug;

location ~ ^/(.+)/ {
    root /usr/share/root/$1/public;
    try_files $uri $uri/ $1/public/index.php?$args; 

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;       
        fastcgi_index index.php;
        include fastcgi_params;
    }   
}

}

Но все, что я получаю, это 404, и он просто не работает. Я немного отлаживал файлы журнала, и, похоже, он ведет себя странно, пытаясь получить /usr/share/root/index.php вместо /usr/share/root/projectA/public/index.php, хотя он нашел правильный сначала место ...

Есть идеи по этому поводу ?!

Заранее спасибо!

В твоем location вам нужно использовать alias вместо того root.

    alias /usr/share/root/$1/public/;