OpenCart — это PHP-приложение, и его производительность сильно зависит от того, как именно обрабатывается PHP-код и как конфигурируется веб-сервер. Основные подходы:

  • Apache + mod_php — классический вариант: PHP работает как модуль самого Apache.

  • Apache / Nginx + FastCGI + PHP-FPM — PHP запускается в отдельном пуле процессов (PHP-FPM), а веб-сервер только проксирует запросы к нему через FastCGI.


???? Что такое Apache и что такое PHP-FPM

???? Apache

Apache — это один из старейших и самых распространённых веб-серверов. Он:

  • Прост в настройке и совместим с большим количеством программного обеспечения.

  • Поддерживает файлы .htaccess, которые OpenCart использует для маршрутизации и SEO-правил.

Минусы Apache:

  • Каждый запрос может запускать отдельный процесс или поток — это может быть очень ресурсоёмко на высоких нагрузках.

  • Статическая и динамическая обработка ведутся в одном процессе, что снижает масштабируемость.


???? FastCGI и PHP-FPM

FastCGI — это протокол, по которому веб-сервер передаёт обработку PHP другим процессам.
PHP-FPM (FastCGI Process Manager) — это менеджер этих PHP-процессов, который:

  • Поддерживает пул рабочих процессов.

  • Позволяет гибко настраивать количество процессов.

  • Лучше управляет памятью и временем жизни процессов.

Преимущества FastCGI/PHP-FPM:

✔ Большая производительность под нагрузкой
✔ Гибкое управление рабочими процессами
✔ Оптимизация за счёт OPcache
✔ Может использоваться и с Nginx, и с Apache

Недостатки:

❌ Сложнее настройка, особенно при миграции с готового Apache-окружения
❌ При использовании без внешнего сервера (например Nginx) требуется тонкая конфигурация


???? OpenCart: особенности применения

Практический опыт показывает, что:

  1. Apache по умолчанию хорошо работает сразу после установки — никаких дополнительных настроек не требуется.

  2. PHP-FPM обычно даёт лучший отклик под высокой нагрузкой (большое количество одновременных пользователей).

  3. Многие используют Nginx + PHP-FPM, потому что Nginx быстрее обслуживает статику и лучше справляется с большим числом соединений, а PHP-FPM обрабатывает только PHP-запросы.

  4. Однако при переходе на FastCGI нужно переписать правила из .htaccess (что для OpenCart требует дополнительных настроек).

???? Сравнительная таблица: Apache vs FastCGI (PHP-FPM)

Критерий Apache + mod_php / Apache + PHP-FPM FastCGI + PHP-FPM
Простота настройки ⭐⭐⭐⭐⭐ (легко) ⭐⭐⭐ (требует навыков)
Поддержка .htaccess ⭐⭐⭐⭐⭐ ⭐☆☆☆☆ (без Apache, нужно конвертировать правила)
Производительность под нагрузкой ⭐⭐⭐ ⭐⭐⭐⭐
Масштабируемость ⭐⭐ ⭐⭐⭐⭐
Использование RAM ⭐⭐ (больше) ⭐⭐⭐ (оптимальнее)
Производительность статических файлов ⭐⭐ (без ускорителя) ⭐⭐⭐⭐ (если с Nginx)
Настройка пула PHP-процессов ⭐⭐ ⭐⭐⭐⭐
Совместимость с OpenCart без изменений ⭐⭐⭐⭐ ⭐⭐⭐ (иногда нужны изменения)
Требуется квалификация ОС/серверов ⭐⭐ ⭐⭐⭐

???? Когда что выбирать

???? Apache + mod_php

???? Когда вы хотите минимум настроек
???? Проект «малый/средний»
???? Нет требования обслуживать сотни одновременных посетителей

???? Хороший выбор для запуска магазина на стандартном хостинге.

???? FastCGI + PHP-FPM (часто с Nginx)

???? Когда важна производительность и масштабирование
???? У вас мощный VPS или выделенный сервер
???? Большой трафик и высокая нагрузка
???? Готовность адаптировать серверные конфиги

???? Этот вариант чаще используют для производственных интернет-магазинов с высокой посещаемостью.

???? Итог

| Apache | ???? Универсальность, простота |
| PHP-FPM (FastCGI) | ???? Лучшая производительность и масштабируемость |

Если вам важна максимальная скорость и устойчивость при высокой нагрузке, то связка FastCGI + PHP-FPM (обычно с Nginx) будет лучшим выбором. Но если вы хотите простоту и совместимость — то классический Apache ещё долго остаётся хорошей опцией.

Отлично ????
Дам практические минимальные примеры конфигураций, которые реально используют для OpenCart в продакшене.

Я покажу 2 варианта:

  1. Apache + PHP-FPM (рекомендуется вместо mod_php)

  2. Nginx + PHP-FPM (максимальная производительность)

Все примеры — под OpenCart 3.x, PHP 7.4 / 8.x.


???? Вариант 1: Apache + PHP-FPM

???? Архитектура

Apache → FastCGI → PHP-FPM

✔ Плюсы

  • Работает .htaccess

  • Минимум изменений для OpenCart

  • Проще миграция


1️⃣ Установка модулей Apache

a2enmod proxy
a2enmod proxy_fcgi
a2enmod rewrite
a2enmod headers
systemctl restart apache2

2️⃣ Apache VirtualHost для OpenCart

/etc/apache2/sites-available/opencart.conf

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/opencart

    <Directory /var/www/opencart>
        AllowOverride All
        Require all granted
    </Directory>

    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php/php8.1-fpm.sock|fcgi://localhost"
    </FilesMatch>

    ErrorLog ${APACHE_LOG_DIR}/opencart_error.log
    CustomLog ${APACHE_LOG_DIR}/opencart_access.log combined
</VirtualHost>

Активируем сайт:

a2ensite opencart
systemctl reload apache2

3️⃣ PHP-FPM пул (оптимальный)

/etc/php/8.1/fpm/pool.d/www.conf

pm = dynamic
pm.max_children = 20
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6

php_admin_value[memory_limit] = 256M
php_admin_value[max_execution_time] = 120
php_admin_value[upload_max_filesize] = 64M
php_admin_value[post_max_size] = 64M

Перезапуск:

systemctl restart php8.1-fpm

4️⃣ .htaccess (OpenCart стандарт)

RewriteEngine On
RewriteBase /

RewriteRule ^sitemap.xml index.php?route=extension/feed/google_sitemap [L]
RewriteRule ^googlebase.xml index.php?route=extension/feed/google_base [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

???? Вариант 2: Nginx + PHP-FPM (рекомендуется для нагрузки)

???? Архитектура

Nginx → FastCGI → PHP-FPM

✔ Плюсы

  • Максимальная скорость

  • Меньше RAM

  • Отлично держит нагрузку

❗ Минус

  • .htaccess НЕ работает (правила нужно перенести)


1️⃣ Nginx конфигурация для OpenCart

/etc/nginx/sites-available/opencart

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/opencart;
    index index.php index.html;

    access_log /var/log/nginx/opencart.access.log;
    error_log /var/log/nginx/opencart.error.log;

    location / {
        try_files $uri $uri/ /index.php?_route_=$uri&$args;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_read_timeout 300;
    }

    location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2?)$ {
        expires 30d;
        access_log off;
    }

    location ~ /\. {
        deny all;
    }
}

Активируем:

ln -s /etc/nginx/sites-available/opencart /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx

2️⃣ PHP-FPM пул (тот же, что и выше)

Работает без изменений.


3️⃣ Перенос SEO-правил OpenCart в Nginx

location = /sitemap.xml {
    rewrite ^ /index.php?route=extension/feed/google_sitemap last;
}

location = /googlebase.xml {
    rewrite ^ /index.php?route=extension/feed/google_base last;
}

???? Что выбрать на практике

Ситуация Рекомендация
Общий хостинг Apache
VPS / сервер Apache + PHP-FPM
Высокая нагрузка Nginx + PHP-FPM
Максимальная скорость Nginx + PHP-FPM
Минимум настроек Apache

???? Мой практический совет

  • До 1–5 тыс. посетителей/день → Apache + PHP-FPM

  • 5–50 тыс. посетителей/день → Nginx + PHP-FPM

  • Маркетплейс / B2B / API → Nginx + PHP-FPM + Redis


Критерий Apache + PHP-FPM Nginx + PHP-FPM
Простота запуска ⭐⭐⭐⭐⭐ ⭐⭐⭐
Скорость ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐
Работа .htaccess
Под нагрузкой Средне Отлично
Рекомендовано для VPS / shared High-load магазины