Конфигурирование Apache для запуска в продакшн Mojolicious


Конфигурирование Apache для запуска  в продакшн Mojolicious

Описываются практические проблемы запуска проекта на Mojolicious на Apache на FreeBSD и даются примеры решений вопросов с конфигурацией Apache.

 

Описание проблемы

Проблемы при большом количестве сайтов на  Mojolicious при работе через Nginx   проявляются в виде «падения» процессов  hypnotoad и появления ситуации долгого «просыпания»,  когда после длительного простоя сайт, при первом обращении,  долгое время формирует страницу, а иногда сайт вообще не открывался, в браузере появлялось сообщение «Bad gateway».

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

Причины и решение можно почитать тут Решение проблемы с «засыпанием» сайтов на  Mojolicious

Решали этот вопос переносом сайтов на  Mojolicious на Apache на FreeBSD, то есть получили связку на Mojolicious + Apache + Nginx.

 

Пример конфигурации Apache

<VirtualHost 127.0.0.1:81>

        ServerName sdep.ru

        DocumentRoot   /usr/local/www/sdep.ru/public

        DirectoryIndex index.html

        <Directory /usr/local/www/sdep.ru/public >

                Options All

                AllowOverride All

                Require all granted

                SSILegacyExprParser on

        </Directory>

        ScriptAlias /cgi-bin/    /usr/local/www/sdep.ru/script/

        <Directory  /usr/local/www/sdep.ru/script >

                Options ExecCGI

                Require all granted

        </Directory>

</VirtualHost>

 

Таким образом сконфигурирован виртуальных хост на Апач, при этом обратите внимание он работает на 81 порту.

Далее в конфигурации Nginx отключаем конфигурацию для данного домена (если она была).

Все запросы на 80й порт для данного домена перенаправляем в Апач на 81 порт.

Это делается вставкой в конфигурационный файл nginx.conf блока наподобии

 

Пример конфигурации Nginx для перенаправления запросов к Apache

server {

        listen       80;

        location / {

                proxy_pass         http://127.0.0.1:81/;

                proxy_set_header   Host             $host;

                proxy_set_header   X-Real-IP        $remote_addr;

                proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

                proxy_cache my_cache;

        }

}

 

Далее перезапускаем Нжинкс, затем перезапускаем Апач командой apachectl graceful

Заходим в браузер на сайт и видим…

Index of /

  • css/
  • fonts/
  • images/
  • img/
  • js/
  • photo/

 

страницу со списком папок в корневой папке сайта  /usr/local/www/sdep.ru/public

 

Для того, чтобы запускался Mojolicious и формировал страницы нужно  добавить в корневую папку нашего сайта файл  .htaccess  содержащий правила редиректов

 

Пример файла .htaccess   для Mojolicious на Apache

 

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-l

RewriteCond %{REQUEST_FILENAME} !-d

 

RewriteRule ^(.*)$ /cgi-bin/cms/$1 [L]

RewriteRule ^$ /cgi-bin/cms [L]

 

Обратите внимание – два правила RewriteRule должны идти именно в таком порядке.

После того, как создали файл  .htaccess   снова заходим на сайт и видим как все заработало.

Страницы формируются, картинки подгружаются, формы работают, шаблоны обрабатываются – все работает так как задумано.

Принцип работы  Mojolicious под  Apache  в выполнении morbo при каждом запросе. После обработки запроса и  отдачи контента скрипт morbo завершается и высвобождает ресурсы сервера.

 

Появление проблемы с url_for на Apache

Сервер работает, сайты на Mojolicious не «засыпают», стали чуточку медленнее открываться - но не принципиально, главное что открываются всегда.

Но считать проблему решенной до конца оказалось рано -  появились вопросы с Mojolicious. При формировании страниц из template в тех местах, где в шаблонах страниц было прописано формирование ссылки в виде <%= url_for ‘func_name’ %> после вывода страницы в браузер ссылка принимала вид  «/cgi-bin/cms/cart»   вместо ожидаемой «/cart»

В то время, как при запуске сайта на Mojolicious без Apache, только на Nginx, просто запуском morbo или hypnotoad  эта же самая ссылка формировалась  «/cart»  как и было задумано.

Но как оказалось это еще не все странности.

Вопрос оказался непростой, можно почитать как его решили.

 

Конфигурирование Apache для запуска  в продакшн Mojolicious

Mojolicious  framework – запуск в продакшн на Apache

Конфигурирование Apache для правильной работы Mojolicious

Решение проблемы с «засыпанием» сайтов на  Mojolicious