Настройка хостинга для работы с 1С-Битрикс

Способы исправления ошибок, выявленных при полном тестировании системы в 1С-Битрикс

Для устранения, необходимо выполнить следующие действия.

Первое, что нужно сделать – это найти файл “/etc/php.d/bitrixenv.ini” – он содержит основные настройки php для веб окружения и заменить в нем “pcre.recursion_limit = 14000” на “pcre.recursion_limit = 100000”.

Вводим в консоли:

nano /etc/php.d/bitrixenv.ini

В секции “Change default values of important constants”:

; Change default values of important constantsmax_input_vars = 10000max_file_uploads = 100max_execution_time = 300post_max_size = 1024Mupload_max_filesize = 1024Mpcre.backtrack_limit = 1000000pcre.recursion_limit = 14000realpath_cache_size = 4096kmysql.default_socket = /var/lib/mysqld/mysqld.sockmysqli.default_socket = /var/lib/mysqld/mysqld.sock

Проведем замену “pcre.recursion_limit = 14000” на “pcre.recursion_limit = 100000”:

; Change default values of important constantsmax_input_vars = 10000max_file_uploads = 100max_execution_time = 300post_max_size = 1024Mupload_max_filesize = 1024Mpcre.backtrack_limit = 1000000;pcre.recursion_limit = 14000pcre.recursion_limit = 100000realpath_cache_size = 4096kmysql.default_socket = /var/lib/mysqld/mysqld.sockmysqli.default_socket = /var/lib/mysqld/mysqld.sock

Так же потребуется модифицировать скрипт запуска сервера HTTP Apache “/etc/rc.d/init.d/httpd”. В файле необходимо модифицировать функцию запуска веб-сервера “start()”, добавив в нее еще одну строку (ulimit -s unlimited).

Вводим в консоли:

nano /etc/rc.d/init.d/httpdstart() {echo -n $”Starting $prog: “ulimit -s unlimitedLANG=$HTTPD_LANG daemon –pidfile=${pidfile} $httpd $OPTIONSRETVAL=$?echo[ $RETVAL = 0 ] && touch ${lockfile}return $RETVAL}

После проделанных действий необходимо перезапустить web сервер:

service httpd restart

Если все сделано верно, можно повторно запустить штатную проверку системы и увидеть результат:

pcre.recursion_limit предупреждение в битрикс отсутствует

Размер стека и pcre.recursion_limit в CentOS 7

В CentOS 7 больше не используется init.d и выше описанные действия справедливы только для CentOS 6 и ниже.

Для CentOS 7, последовательность действий практически такая же, за исключением, правки файла “/etc/rc.d/init.d/httpd”, теперь потребуется создать новую директорию:

mkdir /etc/systemd/system/httpd.service.d

После успешного создания директории, в ней потребуется создать файл с произвольным именем, но с обязательны окончанием .conf:

cd /etc/systemd/system/httpd.service.dtouch pcre.confnano /etc/systemd/system/httpd.service.d/pcre.conf

После успешного создания файла, в него потребуется добавить две строки:

[Service]LimitSTACK=infinity

После успешного добавления строк и файла, потребуется перезагрузить “демонов” для этого необходимо выполнить команды:

systemctl daemon-reloadsystemctl restart httpd

Так же не забывайте, что конфигурация php для Вашего хоста, должна быть как в выше описанном bitrixenv.ini, в некоторых ОС вместо LimitSTACK=infinity необходимо прописывать LimitSTACK=unlim

Ошибка “Замечание. Возможны проблемы в работе с длинными строками из-за системных ограничений”

Решение довольно простое и банальное, если вы используете php 7 достаточно добавить параметр pcre.jit=0 в php.ini файл.

Другие решения:

CentOS 7:
Создать каталог /etc/systemd/system/httpd.service.d, в нем создаем файл start.conf с содержимым:

[Service]

LimitSTACK=infinity

и перечитать конфигурацию systemd и перезапустить веб-сервер

systemctl daemonreload

systemctl restart httpd

CentOS 6
Отредактировать файл /etc/init.d/httpd и дописать в него ulimit -s unlimited в секцию start ()

start(){

echon$“Starting $prog: “

ulimitsunlimited

LANG=$HTTPD_LANG daemonpidfile=${pidfile}$httpd$OPTIONS

RETVAL=$?

echo

[$RETVAL=0]&&touch${lockfile}

return$RETVAL

}

Также для изменения лимитов добавляем код:

*hard nofile500000

*soft nofile500000

root hard nofile500000

root soft nofile500000

в файл /etc/security/limits.conf

Также меняем pcre.recursion_limit и pcre.backtrack_limit на нужные нам параметры в файлах после поиска во всех конфигах:

greplr‘pcre.recursion_limit’/etc/*

(Просмотрено 1 952 раз, 2 просмотров сегодня)

Модули веб-сервера

Ошибка:Загружен модуль mod_dav/mod_dav_fs, WebDav не будет работать
Решение:

 Удалите файл /etc/httpd/conf.modules.d/00-dav.conf

Настройка опций в файле .htaccess

Директивы необходимо добавлять в самый конец или в самое начало файла, вне блоков кода <IfModule>…</IfModule>.

apc.cache_by_default

APC – акселератор PHP, использование которого увеличивает производительность интерпретатора за счет кэширования. В отдельных случаях, однако, может потребоваться его отключение – например, если скрипты не выполняются корректно из-за переполнения кэша.

Управление APC осуществляется директивами:

php_flag apc.cache_by_default onphp_flag apc.cache_by_default off

default_charset

Директива указывает кодировку по умолчанию (например, cp1251, utf-8, koi8-r) для всех выдаваемых страниц.

AddDefaultCharset cp1251php_value default_charset cp1251

display_errors

Директива указывает, требуется ли выводить ошибки на экран вместе с остальным выводом, либо ошибки должны быть скрыты от пользователя.

Включение и выключение осуществляются следующим образом:

php_value display_errors 0php_value display_errors 1

log_errors

Опция позволяет включить логирование ошибок php с их записью в произвольный файл (в примере errors.log). При указании пути к файлу замените u и user на первую букву вашего логина и сам логин.

php_value log_errors onphp_value error_log /home/u/user/путь_к_файлу/errors.log

magic_quotes_gpc

Волшебные кавычки (Magic Quotes) – это процесс автоматического экранирования входящих данных PHP-скрипта. Если опция включена, то одинарные (‘) и двойные (“) кавычки  и обратный слэш ()экранируются обратным слэшем автоматически.

Включение и выключение magic_quotes осуществляется директивами:

php_flag magic_quotes_gpc onphp_flag magic_quotes_gpc off

Опция позволяет включить логирование отправки почты из скриптов сайта. Логи будут содержать полный путь до скрипта, адрес получателя и заголовки. При указании пути к файлу, в который будут записываться логи (mail.log), замените u и user на первую букву вашего логина и сам логин.

php_value mail.add_x_header 1php_value mail.log /home/u/user/public_html/mail.log

max_input_vars

Директива указывает, сколько входных переменных может быть принято в одном запросе. Например:

php_value max_input_vars 11000

mbstring.func_overload и mbstring.internal_encoding

Для большинства CMS используются значения:

php_value mbstring.func_overload 0php_value mbstring.internal_encoding UTF-8

Однако для корректной работы сайтов на старых версиях CMS Битрикс требуются следующие параметры:

php_value mbstring.func_overload 2php_value mbstring.internal_encoding UTF-8

opcache.revalidate_freq

Отключение OpCache (настройка требуется для CMS Битрикс):

php_value opcache.revalidate_freq 0

pcre.recursion_limit

Устанавливает лимит на рекурсию.

php_value pcre.recursion_limit 14000

post_max_size

Опция устанавливает максимально допустимый размер данных, отправляемых методом POST. Также это значение также влияет на загрузку файлов – для загрузки больших файлов оно должно быть больше значения директивы upload_max_filesize.

php_value post_max_size 40M

register_globals

Директивы для включения/выключения глобальных переменных:

php_flag register_globals onphp_flag register_globals off

request_order

Директива регулирует порядок, в котором PHP добавляет переменные GET, POST и Cookie в массив _REQUEST.

php_value request_order GPC

upload_max_filesize

Устанавливает максимальный размер закачиваемого файла.

php_value upload_max_filesize 30M

Наверх

Решение для CentOS/Redhat 7+

Создаем папку откуда будут считываться дополнительные конфигурационные файлы для сервиса httpd:

# mkdir /etc/systemd/system/httpd.service.d

Внутри создаем файл, например lstack.conf и в него пишем:

[Service]

LimitSTACK=infinity

Перегружаем демона и сервис:

# systemctl daemon-reload

# systemctl restart httpd

Настройки базы данных MySQL

Теперь разберем, что делать с настройкой базы данных.

Считаем, что тип таблиц MySQL у нас INNODB

1) Размер буфера, для INNODB это фактический самая важная настройка, принцип простой, желательно, чтобы размер буфера был >= размер базы данных. Если база данных занимает 1Гб, отлично, если размер буфера будет 1Гб. Конечно, зависит эта настройка от количества оперативной памяти на вашем тарифе/VDS/сервере

innodb_buffer_pool_size = 256M

2) размер буфера лога, достаточная цифра для большинства проектов

innodb_log_buffer_size = 8M

3) отключаем буферизацию таблиц для файловой системы, обращаемся напрямую к файлам базы данных

innodb_flush_method = O_DIRECT

4) При каждой транзакции база данных MySQL пишет лог, в данном случае каждые 2 секунды, с этим параметром нужно быть осторожнее, он сильно влияет на производительность. Но если в проекте критична очень целостность данных, например, производятся платежи, то здесь такая настройка не нужна.

innodb_flush_log_at_trx_commit = 2

5) уровень изоляции транзакций, считать данные можно только после проведения транзакции

transaction-isolation = READ-COMMITTED

Режим работы MySQL

Ошибка:innodb_strict_mode=ON, требуется OFF
Решение:

После обновления 1C-Битрикс, а конкретно модуля

main 19.0.400

добавилась новая проверка. Исправление выйдет в следующих версиях BitrixVM. А сейчас можно исправить так:

Вариант 1

  1. Подключиться к серверу под root
  2. Открыть один из файлов (у всех могут быть разные, варианты)
  • /etc/my.cnf
  • /etc/alternatives/my.cnf
  • /etc/bitrix-my.cnf

Добавить строку в блоке # InnoDB parameters
innodb_strict_mode = OFF

Вариант 2

  1. В файл after_connect.php добавить:
    $DB->Query(“SET innodb_strict_mode=’OFF'”);
  2.  В файл after_connect_d7.php добавить:
    $connection->queryExecute(“SET innodb_strict_mode=’OFF'”);

Опции, которые не могут быть изменены

К настройкам PHP, изменение которых невозможно в рамках виртуального хостинга, относятся:

  • memory_limit
  • apc.num_files_hint
  • apc.shm_size
  • apc.ttl
  • apc.user_entries_hint

Наверх

Существенное замечание

Снять ограничение на лимит стека, это рекомендация Битрикс. Скажем прямо не самая удачная, т.к. вы можете решив одну проблему заполучить проблему с постоянной нехваткой ОЗУ. И apache будет падать уже по этой причине. Поэтому лучше подобрать верхнее граничное решение, которое будет устраивать Битрикс. Вычислить его достаточно просто:

Обычно кеш равен 8 Мбайт, убедимся:

Соответственно, нам нужно немного больше, пусть это будет 9 Мбайт.

1024*1024*9 = 9 437 184 байт

пишем в наш файл:

[Service]

LimitSTACK=9437184

Проверяем в “Проверке системы” – должно все быть в порядке. Обычно, я пишу 10 000 000, для простоты запоминания числа.

Тестируем примененые настройки

Напоследок посмотрим разницу показаний монитора производительности 1С-Битрикс, на примере тарифа облачной VDS, с параметрами образ Debian 7 LAMP (Apache + Nginx + MySQL)/2 ядра@2.6 Ггц/1024 Мб/20Гб SAS, php-акселератор APC. Установлена редакция Малый Бизнес. 

До применения выше описанных настроек:

2-1

После:

2-2.jpg

Структура базы данных

Ошибка: В таблице b_search_content_stem поле STEM “varchar(50) NOT NULL” не соответствует описанию на диске “int(11) NOT NULL”
Решение:

 Удалить модуль поиска вместе с таблицами и Заново установить модуль поиска и переиндексировать сайт.

Ошибка:В таблице b_search_content_freq поле STEM “varchar(50) NOT NULL DEFAULT “” ” не соответствует описанию на диске “int(11) NOT NULL DEFAULT “0” “
Решение:

 Удалить модуль поиска вместе с таблицами и Заново установить модуль поиска и переиндексировать сайт.

Ошибка:Структура базы данных: Ошибочный ответ сервера. Не удалось завершить тестирование.
Решение:

 В файле 

/bitrix/modules/main/install/mysql/install.sql

 найти строку:

INDEX ix_module_to_module(FROM_MODULE_ID, MESSAGE_ID, TO_MODULE_ID, TO_CLASS, TO_METHOD)и заменить на:
INDEX ix_module_to_module(FROM_MODULE_ID(20), MESSAGE_ID(20), TO_MODULE_ID(20), TO_CLASS(20), TO_METHOD(20))

Ошибка:В таблице b_user_hit_auth поле TIMESTAMP_X “datetime NULL DEFAULT NULL ” не соответствует описанию на диске “timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP”
Решение:

 Выполнить запрос в

Настройки → Инструменты → SQL запрос

:

ALTER TABLE `b_user_hit_auth` MODIFY `TIMESTAMP_X` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP;

Qiwi Donate

Просмотр параметров php

  • Просмотреть значения параметров php, установленных для сервера, можно на странице phpinfo: https://server.timeweb.ru/phpinfo.php, где server – имя сервера, на котором расположен ваш аккаунт.
  • Для того, чтобы просмотреть значения параметров php, установленных для конкретного сайта, создайте в его директории файл info.php со следующим содержимым:

    После чего информация будет доступна по ссылке http://имя_сайта/info.php.

Наверх

Рейтинг
( 1 оценка, среднее 5 из 5 )
Загрузка ...