Как контролировать использование Dancer 2 в настройках множественного развертывания с Apache (без использования простого CGI)?

У нас есть веб-приложение на Perl, которое долгое время использовало простую CGI, и теперь мы пытаемся перенести его на Dancer 2 с чем-то другим (mod_perl, fastcgi, whathaveyou), чтобы повысить производительность.

Вот настройки Apache, которые у нас есть прямо сейчас (я знаю, что Starman настоятельно рекомендуется, но мы хотели бы придерживаться Apache в качестве нашего веб-сервера)

<VirtualHost *>
...
        <Directory "/opt/alDente/versions/DanceApp/public">
                AllowOverride None
                Options +ExecCGI -MultiViews FollowSymLinks
                Order allow,deny 
                Allow from all
                AddHandler cgi-script .cgi
        </Directory>

        ScriptAliasMatch /dance/(.*) /opt/alDente/versions/DanceApp/public/dispatch.cgi/$1
        ProxyPreserveHost On
        ProxyPass /test http://localhost:3000/
        ProxyPassReverse /test http://localhost:3000/
        ...

Простой CGI-метод развертывания Dancer 2 (как показано выше) прекрасно работает даже при нескольких развертываниях на одном сервере. Проблема: это дает нам нулевой прирост производительности.

Я также пытался использовать простой веб-сервер, который поставляется с Dancer 2 по умолчанию, и иметь Apache, указывающий на него (как указано выше). Он дает нам большой прирост производительности, прост и удобен в настройке. Проблема: мы не можем настроить несколько развертываний с помощью этой настройки, что для нас абсолютно необходимо. А также внутренние URL-адреса испортятся из-за проксирования, если я не изменю /test на / (даже если у меня включен ProxyPreserveHost), но это по очевидным причинам не будет работать при множественном развертывании.

Вчера я также провел весь день, пытаясь заставить mod_perl работать с этой настройкой, но я читал, что mod_perl также не может обрабатывать множественное развертывание на одном сервере и не может заставить его работать должным образом.

Я также пытался настроить его с помощью fastcgi (используя dispatch.fcgi вместо dispatch.cgi, с которым поставляется dancer 2), но это, похоже, не дало никакого прироста производительности.

Что я могу сделать, чтобы решить эту проблему? Для нас обязательны использование Apache и наличие чего-то, что может обрабатывать несколько развертываний на одном сервере (из-за проблем с бюджетом на нашем сервере должны будут размещаться рабочие, бета- и альфа-среды).


person Joe    schedule 16.04.2014    source источник


Ответы (1)


Вполне возможно получить несколько развертываний за одним интерфейсом Apache, используя mod_proxy.

Настройки каждого приложения необходимо обновить, чтобы использовать уникальный порт. Например, порты 3000, 4000 и 5000.

После этого вы используете mod_proxy с чем-то вроде следующего:

<VirtualHost *:80>
ProxyPass / http://localhost:5000/ retry=0 Keepalive=on
ProxyPassReverse / http://localhost:5000/
ProxyPreserveHost On
ServerName XXXXXXXXXXXXXXXXXXX
TimeOut 300
</VirtualHost>

Установив ServerName, вы привязываете его к определенному поддомену.

Вместо этого вы можете использовать директиву Location, если хотите привязать все это к разным URL-адресам:

<Location /production>
ProxyPass / http://localhost:5000/ retry=0 Keepalive=on
ProxyPassReverse / http://localhost:5000/
ProxyPreserveHost On
ServerName XXXXXXXXXXXXXXXXXXX
TimeOut 300
</Location>

Однако, если вы собираетесь сделать это, Plack поддерживает это на уровне App.psgi, как описано в https://metacpan.org/pod/Dancer%3a%3aDeployment#In-case-увасестьпроблемысшаблоном%3a%3aToolkit-on-Dotcloud (не обращайте внимания на заголовок и читайте, он актуален).

person Casao    schedule 29.04.2014