Недавно я попытался установить пассажира на nginx. Установка работает и все хорошо. Однако я также хотел бы запустить веб-почту roundcube на своем сервере.
В основном моя проблема в том, что у nginx есть корневая директива, установленная для пассажирского приложения:
root /home/me/www/hello/public
а roundcube создается как символическая ссылка на сервере как:
/home/me/www/webmail
Мой вопрос, как мне получить URL-адрес www.my-server.com для ссылки на обычный корень, а www.my-server.com/webmail для ссылки на папку roundcube?
Я безуспешно пробовал варианты следующего в моем nginx.conf:
location /webmail/ {
#root /home/me/www;
alias /home/me/www;
try_files $uri /index.php;
passenger_enabled off;
}
Приведенная выше конфигурация приводит к 403 запрещенному при использовании www.my-server.com/webmail и File not found при использовании URI: www.my-server.com/webmail/index.php.
Любые идеи?
Это было немного сложно, но я нашел решение в документация nginx о местоположении.
Поскольку существует директива местоположения, соответствующая файлам .php, она будет иметь приоритет над / webmail / location, и, поскольку она не объявляет корневое местоположение, будет использоваться глобальный корневой каталог, который по-прежнему указывает на папку пассажира.
Решение заключалось в том, чтобы добавить корневую директиву к месту сопоставления php и ограничить выполнение php путём веб-почты, например:
index index.html index.htm index.php
location /webmail/ {
root /home/me/www;
}
location ~ /webmail/.*\.php$ {
root /home/me/www;
...
}
Теперь все работает.