nginx + относительный root
Все еще лежу в больничке. Благо есть нетбук и какой-никакой доступ в сеть Интернет.
После нескольких дней отказался от Denwer и поставил nginx 1.0.10 и php 5.3.8. Поставил nts версию, т.к. отладчик zendDebug.dll есть только nts версия для php 5.3.
Nginx обрабатывает статику, ведет логи и передает php-cgi обработку динамических страниц. Для работы локального веб сервера достаточно и 1 процесса php-cgi. Шлюза php-fpm для windows я не нашел, я так понимаю, что php-fpm работает только в unix?
Все хорошо, кроме 1 момента. Для работы хостов мне нужно указать директиву root для сервера, но тут возникает 2 проблемки:
1) Если указать относительный путь с использованием ".." верхнего каталога, то при передаче параметров в fastCGI переменная nginx не заменяется на абсолютный путь (она и не должна впринципе)
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
И php-cgi не находит скрипт, который нужно выполнить.
Вид получается примерно такой (как я понимаю) C:/webServer/nginx/conf/../../vhost/host1/;
Указав абсолютный root проблема исчезает, но это препятствует портативности хостов. Т.е. при переносе сервера придется править конфиги хостов.
Можно было бы определить где-то в конфиге 1 раз какую-=то переменную nginx которой указать основной префикс до веб сервера и далее использовать эту переменную при настройке хостов, но как я понял, порсто так определить самостоятельно нельзя переменную в nginx. Только в регулярках в location.
Оставил вопрос на форуме nginx - может кто подскажет как эту проблему решить.
UPD:
Разобрался сам.
В модуле rewrite есть директива set для установки собственной директивы.
Я так понимаю, что задумывалась она для другого немного, но для указания собственных переменных в рамках server и location подходит тоже. Неплохо бы было определять переменные и на уровне http. Чтобы каждый раз не include эту переменную, которая используется многократно в разных виртуальных адресах или локейшенах.
Определяем где-то нужную нам переменную:
set $serverRoot C:/webServer;
И далее просто подулючаем эту часть конфига в нужном нам месте (директива set работает в пределах server и location, уточнить можно в документации nginx):
# путь include у каждого свой
include user/root;
root $serverRoot/hosts/host1;
ordPress
блог AlexPTS