Не работает Page Builder в CMS PrestaShop – поучительная сказка со счастливым концом

2018-11-14T13:58:48+00:00Ноябрь 14th, 2018|Блог|

Что делать, если магазин под управлением PrestaShop не отображает визуальный редактор макетов страниц, отображая вместо него какой-то серый прямоугольник?

В некотором царстве (если быть точным – биологический вид человека разумного принадлежит к царству животных) жил-был купец. Торговал он товаром заморским, жил-поживал, добра наживал.

Однажды, чтоб дело ещё лучше спорилось, позвал купец умельцев, чтоб интернет-магазин ему сделали, чтоб товары заморские пуще прежнего покупались и продавались в магазине том, да добро чтоб наживалось побыстрее. Дюжину ночей и тринадцать дней умельцы работали – сделали купцу не магазин, а загляденье. А чтоб купец в этом магазине мог что угодно поменять, от убранства до описаний товаров заморских, дали волшебный колокольчик: позвонишь в такой колокольчик, и враз всё хоть вверх дном перевернётся, главное – аккуратно позвонить, чтоб летящим сундуком не зашибло.

И вот как-то раз решил купец немного фасад магазину подправить. Решил, что двери пусть посредине будут, а окна – по бокам. И вывеска пусть новая заодно с логотипом чугунным будет, а то что ж! Позвонил купец в колокольчик волшебный, да и говорит магазину: «Повернись-ка ты, магазин, ко мне как надо, сейчас фасад тебе менять будем!». Заскрипело что-то в магазине, заухало, повернулся он, да как-то не той стороной, видать, потому что заместо фасада красивого увидел купец только стену бетонную, ни окон там, ни дверей, ни логотипа чугунного.

Позвонил купец ещё в колокольчик, поматюкался на магазин, да и решил, что надо умельцев на помощь звать, которые магазин ему этот строили. Пришли умельцы, позвонили в колокольчик, смотрят – как есть стена бетонная, ни окон, ни дверей, и ничего с ней не сделаешь, даже слова совсем коротенького на ней не напишешь. Призадумались, умельцы, решили, что надо у Бабы Яги совета спросить, авось она что подскажет...

Для данного сервера была активирована опция поддержки по гарантии. Это значит, что администрирование системы, обеспечивающей работу веб-сайта, находится в нашей сфере ответственности. В 17:53 службу технической поддержки поступил запрос, в котором клиент сообщил о трудностях в работе веб-сайта на выделенном ему виртуальном сервере. В сообщении содержалось описание проблемы и информация, которая необходима для того, чтобы иметь возможность воспроизвести ситуацию самостоятельно.

Симптоматика указывала на то, что причина неполадки, скорее всего, обусловлена какими-то особенностями работы PrestaShop именно в данной конкретной среде. Особенно очевидным это стало, когда мы увидели следующую картину:

Стало ясно, что при запуске Page Builder в браузере у пользователя запускается JS-приложение, которое начинает весьма интенсивно отправлять запросы к серверу, где работает серверная часть приложения PrestaShop. Проанализировав содержимое самих запросов, мы обнаружили, что запросы не очень сильно отличаются друг от друга, при этом в разные моменты успешно обрабатывается разное количество запросов.

Конечно же, mod_evasive, что же ещё? Хранит в оперативной памяти количество запросов к веб-серверу из одного с разных адресов, а если количество запросов превышает некий предел – на какое-то время (как правило, 10 секунд) считает IP-адрес, с которого эти запросы поступают, потенциальным источником неприятностей и блокирует новые запросы с его стороны.

И, кстати, нет же, чтоб Apache HTTP Service хоть какие-то записи в error.log об этом делал, как же, как же... Только вот такое:

[Mon Oct 28 18:18:18.130666 2018] [:error] [pid 13666] [client 13.13.13.13:13666] client denied by server configuration: /***/admin***/index.php, referer: https://***/admin***/index.php?controller=AdminPspagebuilderProfile&token=***&id_pagebuilderprofile=***

Ага, denied by server configuration, это в какой-то мере даже правда. В конфигурации же есть директива подключения этого модуля? Есть! Ну так и всё. ;-) Но, если вы, например, используете такую популярную панель управления как ISPmanager, учтите, что mod_evasive включён по умолчанию, так что, если веб-сайт время от времени по какой-то причине начинает отвечать 403-ми ошибками, проверьте, не подключен ли такой модуль и у вас. Можно, например, выполнить такую команду:

httpd -M | grep evasive

В общем, пришлось попросить его не мешать. Для этого в файл /etc/httpd/conf.d/mod_evasive.conf (это верно для CentOS 7 с ISPmanager 5 Lite) пришлось внести изменения, а именно – закомментировать (добавить значок «#» в начало строки) следующую строку:

LoadModule evasive20_module modules/mod_evasive24.so

Потом, правда, решили, что это не совсем элегантно и вернули модуль на место, изменили значения параметров DOSPageCount и DOSSiteCount. Чтоб совсем красиво было.

Подвигал двигал купец витрину по фасаду, двери пошире сделал, да логотип чугунный повесил – ай да красота! Пуще прежнего стали продаваться товары заморские, добра ещё больше наживать стал.

Метки: , , , , , , , , , ,