fbpx

Оптимальные настройки VPS c интернет-магазином на Битриксе

Давайте рассмотрим оптимальные настройки для VPS со следующими параметрами процессор 4х2ГГц, память 4 Гб, диск 80 Гб. На нем будет интернет-магазин на Битриксе с посещаемостью около 300 человек в день. 

Рекомендуем использовать Ubuntu 20.04 LTS или 22.04 LTS. Это стабильные и хорошо поддерживаемые дистрибутивы.

Nginx (веб-сервер)

Nginx будет выступать в роли фронтенд-сервера, отдавая статику и проксируя запросы к PHP-FPM.

Установка:

sudo apt install -y nginx

sudo ufw allow ‘Nginx HTTP’

sudo ufw allow ‘Nginx HTTPS’ # Если планируете использовать SSL

Основной файл конфигурации /etc/nginx/nginx.conf:

nginx

user www-data;

worker_processes auto; # Использует количество ядер процессора

pid /run/nginx.pid;

include /etc/nginx/modules-enabled/*.conf;

 

events {

 worker_connections 1024; # Количество одновременных соединений на рабочий процесс

 multi_accept on;

}

 

http {

 sendfile on;

 tcp_nopush on;

 tcp_nodelay on;

 keepalive_timeout 65; # Таймаут для keep-alive соединений

 types_hash_max_size 2048;

 

 include /etc/nginx/mime.types;

 default_type application/octet-stream;

 

 # SSL-настройки (если используете SSL)

 ssl_protocols TLSv1.2 TLSv1.3;

 ssl_prefer_server_ciphers on;

 ssl_ciphers «EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH»;

 ssl_session_cache shared:SSL:10m;

 ssl_session_timeout 10m;

 

 # Gzip-сжатие

 gzip on;

 gzip_vary on;

 gzip_proxied any;

 gzip_comp_level 5; # Уровень сжатия (1-9), 5-6 хороший баланс

 gzip_buffers 16 8k;

 gzip_http_version 1.1;

 gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

 gzip_disable «MSIE [1-6]\\.»; # Отключаем для старых IE

 

 # Логирование

 access_log /var/log/nginx/access.log;

 error_log /var/log/nginx/error.log warn; # warning, error, crit

 

 # Заголовок X-Frame-Options для защиты от кликджекинга

 add_header X-Frame-Options «SAMEORIGIN»;

 # Заголовок X-Content-Type-Options для предотвращения MIME-сниффинга

 add_header X-Content-Type-Options «nosniff»;

 # Заголовок X-XSS-Protection для защиты от XSS

 add_header X-XSS-Protection «1; mode=block»;

 

 # Включить виртуальные хосты

 include /etc/nginx/conf.d/*.conf;

 include /etc/nginx/sites-enabled/*;

}

Конфигурация виртуального хоста для Битрикса (/etc/nginx/sites-available/your_domain.conf):

nginx

server {

 listen 80;

 server_name your_domain.com www.your_domain.com; # Замените на ваш домен

 root /var/www/your_domain.com/public_html; # Замените на путь к корню вашего сайта Битрикс

 

 # Перенаправление HTTP на HTTPS (рекомендуется после установки SSL)

 # return 301 https://$host$request_uri;

 

 location / {

 index index.php index.html index.htm;

 try_files $uri $uri/ /bitrix/urlrewrite.php$is_args$args;

 }

 

 # Настройки для PHP-FPM

 location ~ \\.php$ {

 fastcgi_pass unix:/run/php/php8.1-fpm.sock; # Проверьте версию PHP-FPM

 fastcgi_index index.php;

 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

 include fastcgi_params;

 fastcgi_buffer_size 128k;

 fastcgi_buffers 4 256k;

 fastcgi_busy_buffers_size 256k;

 fastcgi_temp_file_write_size 256k;

 fastcgi_read_timeout 300; # Увеличьте для долгих операций Битрикса

 }

 

 # Запрет доступа к служебным файлам Битрикса

 location ~ ^/(bitrix/modules|bitrix/php_interface|upload|bitrix/cache|bitrix/managed_cache)/ {

 deny all;

 }

 

 # Запрет доступа к некоторым типам файлов

 location ~ /\\.ht {

 deny all;

 }

 

 # Кэширование статики

 location ~* \\.(jpg|jpeg|gif|png|ico|css|js|woff|woff2|ttf|svg|eot)$ {

 expires 30d; # Кэшировать статику на 30 дней

 log_not_found off;

 access_log off;

 }

 

 error_page 404 /404.html; # Пример страницы ошибки

 error_page 500 502 503 504 /50x.html;

 location = /50x.html {

 root /usr/share/nginx/html;

 }

}

Активация виртуального хоста:

sudo ln -s /etc/nginx/sites-available/your_domain.conf /etc/nginx/sites-enabled/

sudo nginx -t # Проверка синтаксиса

sudo systemctl restart nginx

2. MySQL (база данных)

Используйте MySQL 8.0 или MariaDB 10.x. MariaDB часто считается более производительной для веб-приложений.

Установка MariaDB:

sudo apt install -y mariadb-server mariadb-client
sudo mysql_secure_installation # Обязательно выполните для базовой безопасности

Настройки /etc/mysql/mariadb.conf.d/50-server.cnf (или my.cnf): Найдите секцию [mysqld] и добавьте/измените следующие параметры. Значения могут потребовать тонкой настройки, но эти будут хорошей отправной точкой.

[mysqld]
# Basic settings
bind-address = 127.0.0.1 # Слушать только локальные соединения
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

# Caching and memory
query_cache_size = 0 # В MariaDB 10.1+ и MySQL 5.7.20+ Query Cache устарел/удален
query_cache_type = 0 # Отключаем, т.к. может быть узким местом
max_connections = 150 # Максимальное количество одновременных подключений (увеличьте при необходимости)
connect_timeout = 10
wait_timeout = 600
interactive_timeout = 600

key_buffer_size = 32M # Для MyISAM, но Битрикс в основном использует InnoDB
max_allowed_packet = 64M # Максимальный размер пакета

# InnoDB settings (очень важны для производительности Битрикса)
innodb_buffer_pool_size = 2G # Примерно 50-70% от доступной RAM, но не более 75%
# Для 4GB RAM, 2GB — хорошая отправная точка.
# Если Битрикс будет на одном сервере с БД, то 2GB — максимум.
innodb_log_file_size = 256M # Размер redo логов. Больше размер = меньше операций записи.
innodb_log_files_in_group = 2
innodb_flush_log_at_trx_commit = 2 # 2 = быстрее, но есть риск потери 1 сек данных при сбое
# 1 = полностью ACID-совместимо, но медленнее
innodb_file_per_table = 1 # Каждая таблица в своем файле. Рекомендуется.
innodb_flush_method = O_DIRECT # Для Linux, прямое обращение к диску
innodb_thread_concurrency = 0 # Автоматическое управление потоками
innodb_read_io_threads = 8
innodb_write_io_threads = 8
innodb_io_capacity = 200 # Количество IOPS, которое может обрабатывать диск. Увеличьте для SSD.
innodb_io_capacity_max = 2000

# Logging
log_error = /var/log/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1 # Логировать запросы дольше 1 секунды

# Replication (если не используете, не трогайте)
# skip-name-resolve # Отключает разрешение DNS имен для клиентов, иногда ускоряет подключение

После изменения настроек:

sudo systemctl restart mariadb

Дополнительно:

  • Создайте отдельного пользователя базы данных для Битрикса с минимальными необходимыми привилегиями.
  • Регулярно оптимизируйте таблицы (например, OPTIMIZE TABLE для InnoDB редко нужен, но для MyISAM полезен).
  • Следите за логом медленных запросов (mysql-slow.log).

3. PHP (PHP-FPM)

Битрикс хорошо работает с PHP 8.1 или 8.2.

Установка PHP-FPM и необходимых расширений:

sudo apt install -y php8.1-fpm php8.1-mysql php8.1-gd php8.1-xml php8.1-mbstring php8.1-zip php8.1-soap php8.1-curl php8.1-intl php8.1-bcmath php8.1-imagick php8.1-opcache

  • php8.1-imagick: Для работы с изображениями, особенно если используете ImageMagick.
  • php8.1-opcache: Критически важен для производительности.

Настройки PHP-FPM (/etc/php/8.1/fpm/php.ini):

[PHP]
memory_limit = 256M # Увеличьте, если Битрикс выдает ошибки, 256M-512M обычно достаточно
max_execution_time = 300 # Увеличьте для выполнения долгих скриптов (импорт/экспорт)
max_input_time = 300
upload_max_filesize = 64M
post_max_size = 64M
date.timezone = Europe/Moscow # Или ваш часовой пояс
display_errors = Off # В продакшене всегда Off
log_errors = On
error_log = /var/log/php/php_errors.log # Создайте папку и файл, дайте права www-data
expose_php = Off # Отключаем показ версии PHP в заголовках

[opcache]
opcache.enable = 1
opcache.memory_consumption = 128 # Память для OPcache в MB. Для Битрикса 128-256MB.
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 10000 # Количество файлов для кэширования
opcache.revalidate_freq = 0 # 0 = проверять изменения файлов при каждом запросе (для dev)
# В продакшене лучше 0 или очень большое число, если вы используете деплой без изменений файлов
# и очищаете кэш при деплое. Для Битрикса с его админкой, 0 может быть удобнее.
# Или 60 (секунд) для баланса.
opcache.fast_shutdown = 1
opcache.enable_cli = 1

Настройки PHP-FPM Pool (/etc/php/8.1/fpm/pool.d/www.conf):

[www]
user = www-data
group = www-data
listen = /run/php/php8.1-fpm.sock
listen.owner = www-data
listen.group = www-data

pm = ondemand # Или dynamic. ondemand экономит память, dynamic быстрее при постоянной нагрузке.
# Для 300 чел/день ondemand или dynamic с небольшим min_servers будет оптимален.
pm.max_children = 50 # Максимальное количество дочерних процессов FPM.
# Рассчитывается как (Total RAM — (MySQL RAM + Nginx RAM)) / (php memory_limit * 1.2)
# Для 4GB RAM, memory_limit 256MB, MySQL 2GB, Nginx 100MB: (4096-2048-100) / (256*1.2) = 1948 / 307 = ~6.3
# Начните с 10-20 и мониторьте. 50 может быть многовато для 4GB RAM. Начнем с 10-15.
pm.start_servers = 5 # Количество серверов, запускаемых при старте
pm.min_spare_servers = 5 # Минимальное количество свободных серверов
pm.max_spare_servers = 15 # Максимальное количество свободных серверов
pm.max_requests = 500 # Количество запросов, после которых процесс будет перезапущен (для предотвращения утечек памяти)
request_terminate_timeout = 300 # Таймаут на выполнение запроса. Должен быть >= max_execution_time

Создание папки для логов PHP:

sudo mkdir /var/log/php
sudo chown www-data:www-data /var/log/php
sudo systemctl restart php8.1-fpm

4. Повышение Безопасности VPS

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

4.1. Настройка Брандмауэра (Firewall)

Брандмауэр действует как охранник, который контролирует входящий и исходящий сетевой трафик, разрешая или блокируя соединения на основе заданных правил. Для Linux-систем наиболее распространенным является UFW (Uncomplicated Firewall) – упрощенная оболочка для iptables.

  • Установка UFW (если не установлен):

sudo apt update
sudo apt install ufw

  • Настройка базовых правил:

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

sudo ufw allow OpenSSH # Разрешить SSH-соединения (обычно порт 22)
sudo ufw allow http # Разрешить HTTP (порт 80)
sudo ufw allow https # Разрешить HTTPS (порт 443)
# sudo ufw allow 80/tcp # Можно указывать порты напрямую
# sudo ufw allow 443/tcp
# sudo ufw allow 22/tcp

Если вы используете другие сервисы (например, FTP на порту 21, MySQL на 3306), не забудьте разрешить их соответствующие порты.

  • Включение и проверка статуса UFW:

sudo ufw enable # Активировать брандмауэр (подтвердите ‘y’)
sudo ufw status verbose # Проверить текущие правила и статус

После включения UFW, он будет запускаться автоматически при каждой перезагрузке сервера.

4.2. Настройка SSH для Повышенной Безопасности

SSH является основной точкой входа на ваш сервер, поэтому его защита критически важна.

  • Изменение порта SSH по умолчанию:

Порт 22 очень часто атакуется ботами. Изменение его на нестандартный порт (например, 2222, 54321) значительно снизит количество автоматических попыток подбора пароля.

Откройте конфигурационный файл SSH:

sudo nano /etc/ssh/sshd_config

Найдите строку Port 22. Раскомментируйте ее (если закомментирована #) и измените 22 на желаемый порт (например, Port 2222).

Важно: Прежде чем закрыть файл, добавьте правило в UFW для нового порта!

sudo ufw allow 2222/tcp # Разрешить новый SSH порт

Перезапустите службу SSH для применения изменений:

sudo systemctl restart sshd

Проверка: Откройте НОВОЕ окно терминала и попробуйте подключиться к серверу по новому порту (например, ssh ваш_пользователь@ваш_ip -p 2222). Не закрывайте старую сессию, пока не убедитесь, что новая работает!

После успешного подключения, можно удалить старое правило SSH и запретить доступ к старому порту (если вы не хотите его использовать):

sudo ufw delete allow OpenSSH # Удалить правило OpenSSH
# Или: sudo ufw deny 22/tcp # Явно запретить порт 22

  • Отключение аутентификации по паролю (рекомендуется):

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

Убедитесь, что вы уже настроили SSH-ключи для доступа (см. предыдущую часть статьи).

Откройте sshd_config снова:

sudo nano /etc/ssh/sshd_config

Найдите строки и измените их значения:

PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no # Иногда требуется для полного отключения паролей

Сохраните и перезапустите службу SSH:

sudo systemctl restart sshd

Внимание: Убедитесь, что у вас есть рабочий SSH-ключ, прежде чем отключать парольную аутентификацию! Иначе вы навсегда заблокируете себя от сервера.

  • Отключение входа для пользователя root:

Это предотвратит прямые атаки на учетную запись root. Всегда используйте обычного пользователя, а затем sudo для выполнения административных задач.

Откройте sshd_config:

sudo nano /etc/ssh/sshd_config

Найдите строку PermitRootLogin и измените ее на:

PermitRootLogin no

Сохраните и перезапустите службу SSH:

sudo systemctl restart sshd

4.3. Установка и Настройка Fail2Ban

Fail2Ban автоматически сканирует логи сервера (SSH, веб-сервера и т.д.) на предмет подозрительной активности, такой как многократные неудачные попытки входа. При обнаружении такой активности, он временно или постоянно блокирует IP-адрес злоумышленника в брандмауэре.

  • Установка Fail2Ban:

sudo apt install fail2ban

  • Настройка Fail2Ban:

Основной конфигурационный файл находится по адресу /etc/fail2ban/jail.conf. Однако, для внесения изменений рекомендуется создавать копию этого файла с расширением .local, чтобы ваши изменения не были перезаписаны при обновлении пакета.

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

В этом файле вы найдете различные секции ([DEFAULT], [sshd], [nginx-http-auth] и т.д.).

  • В секции [DEFAULT]:
  • bantime = 10m(время блокировки в секундах, минутах или часах; 10 минут по умолчанию)
  • findtime = 10m(период, в течение которого учитываются неудачные попытки; если за 10 минут 5 попыток, то бан)
  • maxretry = 5(количество неудачных попыток до блокировки)
  • destemail = root@localhost(куда отправлять уведомления, если настроена почта)
  • action = %(action_mw)s(действие при блокировке: action_mw блокирует и отправляет письмо)

В секции [sshd]:

Убедитесь, что она активна (enabled = true). Если вы изменили порт SSH, укажите его здесь:

[[sshd]
enabled = true
port = ssh,2222 # Если вы изменили порт на 2222
# filter = sshd
# logpath = %(sshd_log)s
# maxretry = 5

Если вы используете nginx или apache с аутентификацией, найдите соответствующие секции ([nginx-http-auth], [apache-auth]) и активируйте их.

  • Перезапуск Fail2Ban:

sudo systemctl restart fail2ban
sudo systemctl enable fail2ban # Убедиться, что он запускается при старте
sudo systemctl status fail2ban # Проверить статус

  • Проверка заблокированных IP:

sudo fail2ban-client status
sudo fail2ban-client status sshd # Для конкретного «jail»

5. Оптимизация Производительности и Ресурсов

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

5.1. Управление Подкачкой (Swap Space)

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

  • Проверка текущего использования swap:

sudo swapon —show
sudo free -h

  • Создание swap-файла (если он отсутствует или его недостаточно):

Рекомендуемый размер swap обычно составляет 1-2x от размера RAM, но не более 4GB для большинства случаев.

Создайте файл (например, 2GB):

sudo fallocate -l 2G /swapfile
# Или, для старых систем: sudo dd if=/dev/zero of=/swapfile bs=1M count=2048

Установите правильные разрешения:

sudo chmod 600 /swapfile

Отформатируйте файл как swap:

sudo mkswap /swapfile

Активируйте swap-файл:

sudo swapon /swapfile

Сделайте swap постоянным (чтобы он активировался при перезагрузке):

Добавьте следующую строку в конец файла /etc/fstab:

sudo nano /etc/fstab

Добавьте:

/swapfile none swap sw 0 0

  • Настройка swappiness:

swappiness — это параметр ядра Linux, который определяет, насколько часто система будет использовать swap. Значение 0 означает, что swap будет использоваться только в крайнем случае, 100 — очень агрессивно. Для VPS обычно рекомендуется значение от 10 до 30.

Проверьте текущее значение:

cat /proc/sys/vm/swappiness

Измените значение (например, на 10) временно:

sudo sysctl vm.swappiness=10

Сделайте изменение постоянным:

Откройте /etc/sysctl.conf и добавьте или измените строку:

sudo nano /etc/sysctl.conf

Добавьте:

vm.swappiness = 10

  • Настройка vfs_cache_pressure:

Этот параметр контролирует, насколько агрессивно ядро очищает кэш inode и dentry (метаданные файловой системы). Более высокое значение (по умолчанию 100) означает, что кэш будет очищаться чаще, освобождая RAM, но потенциально замедляя доступ к файлам. Для большинства VPS значение по умолчанию подходит, но если вы наблюдаете проблемы с производительностью дискового ввода/вывода при высокой загрузке RAM, можно попробовать снизить его (например, до 50), чтобы ядро дольше держало кэш в памяти.

  1. Проверьте текущее значение:

cat /proc/sys/vm/vfs_cache_pressure

  1. Сделайте изменение постоянным (например, на 50):

Откройте /etc/sysctl.conf и добавьте или измените строку:

sudo nano /etc/sysctl.conf

Добавьте:

vm.vfs_cache_pressure = 50

5.2. Установка и Настройка NTP (Network Time Protocol)

Точное время на сервере критически важно для корректной работы множества сервисов, ведения логов, работы SSL-сертификатов и синхронизации данных.

  • Установка NTP-клиента (например, ntp или systemd-timesyncd):

Современные версии Ubuntu/Debian часто используют systemd-timesyncd по умолчанию, который достаточно прост. Для более продвинутых нужд можно установить ntp.

sudo apt install ntp # Для установки NTP
# Или убедиться, что systemd-timesyncd активен:
# timedatectl status

  • Проверка и синхронизация времени:

timedatectl

Если время не синхронизировано, убедитесь, что служба ntp или systemd-timesyncd запущена:

sudo systemctl status ntp # или systemctl status systemd-timesyncd

Если необходимо, перезапустите:

sudo systemctl restart ntp # или systemctl restart systemd-timesyncd

Выполняем работы по по IT-безопасности. Оставить заявку можно здесь.

 

АКЦИЯ! Бесплатное обслуживание до конца месяца!
Спасибо!
Ваши данные успешно отправлены.
Другие статьи
Удаленное администрирование серверов: преимущества, недостатки и лучшие практики
В современном мире, где гибкость и эффективность являются ключевыми факторами успеха, удаленное администрирование...
Первые признаки, что у вашего сервера проблемы
В мире, где цифровые технологии являются основой практически любого бизнеса, стабильная и бесперебойная работа серверов...
Полный IT-аутсорсинг vs. частичная поддержка: что выбрать для вашей компании?
В современном бизнесе, где технологии являются движущей силой успеха, эффективное управление IT-инфраструктурой...
Скрытые затраты на содержание собственной IT-команды, о которых вы не догадывались
В современном мире, где технологии являются движущей силой любого бизнеса, многие компании стремятся обзавестись...
IT-сленг: разбираемся в языке цифрового мира
Мир информационных технологий постоянно развивается, и вместе с ним растет и его собственный язык – IT-сленг. Для...
Как хакеры взламывают офисные компьютеры: Методы, примеры и защита
В современном мире, где информация является ключевым активом, офисные компьютеры становятся привлекательной мишенью для...
HTTP/3: что меняет и какие плюсы?
Интернет, каким мы его знаем, постоянно эволюционирует. Загрузка веб-страниц, стриминг видео, онлайн-игры – всё это...
Какие российские операционные системы есть?
В условиях современных геополитических реалий и стремительного развития цифровых технологий вопрос о технологическом...
CI/CD Pipeline: пошагово автоматизируем IT-разработку
В современном мире разработки программного обеспечения скорость, надежность и эффективность являются ключевыми...
Внедрение DevOps в свой IT-отдел: зачем и как?
В современном динамично развивающемся мире IT, где скорость вывода продукта на рынок, стабильность работы систем и...
Архитектура Kubernetes: Control Plane и Worker Nodes
В современном мире облачных вычислений и контейнеризации Kubernetes стал де-факто стандартом для оркестрации...
VPN для бизнеса: когда и почему нужно использовать Virtual Private Network
VPN – это технология, которая создает зашифрованный, безопасный "туннель" через общедоступную сеть (например, Интернет)...