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

Запуск roundcube вместе с пассажиром на nginx

Недавно я попытался установить пассажира на 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;
    ...
}

Теперь все работает.