Конфигурация nginx для нескольких подкаталогов, содержащих файлы zf2/php, не работает
Моя корневая структура выглядит так
/root/ /root/projectA/... /root/projectB/... /root/projectC/...
Прежде чем я сконфигурировал каждую из моих подкаталогов с одним дополнительным блоком местоположения в моем файле 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, хотя он нашел нужное место сначала...
Есть идеи по этому поводу?!
Заранее спасибо!
1 ответ
В вашем location
вам нужно использовать alias
вместо root
,
alias /usr/share/root/$1/public/;