Get Social

Hestia CP + Nginx + Php-fpm – исполнение php кода в html

Конечно непонятно зачем и кому это нужно, но бывает, что в статических страничках html нужно исполнять код php (например, мне пришлось столкнуться с такой задачей).
По умолчанию в панели Hestia CP + Nginx + Php-fpm эта функция не работает.

Решение.

Нужно править стандартные шаблоны nginx php-fpm. Для этого заходим в папку шаблонов и делаем копии, например, шаблона default:

cd /usr/local/hestia/data/templates/web/nginx/php-fpm
cp default.tpl default-html2php.tpl
cp default.stpl default-html2php.stpl

затем находим блок, где описывается php и добавляем html (или меняем):

              location ~ [^/]\.php|html(/|$) {
                        try_files $uri =404;
                        include /etc/nginx/fastcgi_params;
                        fastcgi_index index.html;

Затем в панели Hestia переключаем конфиг Nginx (по кнопке Advanced Options и дальше Web Template NGINX)

Тут скорее всего сайт перестанет открываться вообще, напишет Access Denied и в логах [domain].access.log мы увидим код 403. Но вот в логах [domain].error.log появится ошибка вроде:
([domain] – ваш домен сайта)

FastCGI sent in stderr: “Access to the script ‘index.html’ has been denied (see security.limit_extension

Это уже более информативно. Исправить это можно так:

Правим

nano /etc/php/8.2/fpm/pool.d/[domain].com.conf

добавим строчку:

security.limit_extensions = .php .html

перезапускаем php-fpm

/etc/init.d/php8.2-fpm restart

(вместо 8.2 используйте свою версию php)

! не рекомендую править какие-либо общие конфиги, для безопасности

Не создается перевод фрагмента текста в October CMS, плагин rainlab translate

Обнаружил необычную проблему в October CMS, а точнее в модуле rainlab translate. Баг это или фича? Непонятно…

При длине текста около 200 символов перевод на другой язык не выполняется, но при этом на странице “translate messages” в бэкенде ( backend/rainlab/translate/messages ) генерируются новые строчки при каждом обновлении страницы. Хорошо, что увидел это вовремя…

Сначала заподозрил, что дело в тегах или не-юникод символах, потому что текст передали по мессенджеру.

Набрал его вручную. Но не помогло. Потом
Стал искать, может где-то есть ограничение на длину текста.
Оказалось всё дело в том, что такое ограничение есть базе данных. В таблице rainlab_translate_messages столбце code прописано маленькое значение varchar(). Можно просто прописать побольше, например 667 ))

ALTER TABLE `rainlab_translate_messages` CHANGE `code` `code` VARCHAR(667) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL;