Налаштування Apache: оптимізація, безпека та кешування

Налаштування Apache: оптимізація, безпека та кешування

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Налаштування Apache: оптимізація, безпека та кешування
Середній
~1 день

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1418
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1286
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    983
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1243
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    998

Налаштування Apache: оптимізація, безпека та кешування

Уявіть: інтернет-магазин на WordPress з 1000 унікальних відвідувачів на годину видає 503 помилку. Типова картина — Apache вичерпав MaxClients, а PHP-FPM не налаштований. Без кешування кожен запит до статики (CSS, JS, зображення) завантажує сервер заново — LCP вилітає за 5 секунд. У 90% випадків це вирішується переходом на PHP-FPM через Unix-сокет та увімкненням mod_expires. За 10 років ми налаштували Apache для 500+ проектів: від простих лендінгів до високонавантажених SaaS. Нижче — перевірена схема, яка зменшує TTFB на 30% і знижує споживання пам'яті на 40%.

Неочевидна проблема — .htaccess. На кожен запит Apache перевіряє директорії від кореня до DocumentRoot на наявність .htaccess. Для глибоких структур це до 10 дискових операцій. Ми використовуємо AllowOverride None і переносимо правила в конфіг VirtualHost. Це прискорює віддачу на 15–20%.

Типові проблеми, з якими ми працюємо

  • Повільна віддача статики — без mod_expires і mod_deflate браузер щоразу запитує файли заново, LPC зростає на 30%.
  • Небезпечні VirtualHost — відкриті директорії, застарілі протоколи, відсутність HSTS.
  • Некорректний .htaccess — Laravel не працює через відсутність RewriteRule, .env доступний ззовні.
  • PHP-FPM через TCP, а не Unix-сокет — зайві 20% затримки на localhost.
  • Відсутність rate limiting — один клієнт може викачати весь контент за секунди.

Як ми налаштовуємо Apache під ключ

Наш стек: Apache 2.4+, PHP 8.3 (FPM через socket), Laravel, WordPress, будь-яка CMS. Для кожного проекту створюємо Production-ready конфіг з урахуванням навантаження. Ось приклад для Laravel:

<VirtualHost *:443> ServerName example.com DocumentRoot /var/www/myapp/current/public SSLEngine on SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem Protocols h2 http/1.1 Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" Header always set X-Frame-Options "DENY" <Directory /var/www/myapp/current/public> AllowOverride All Require all granted Options -Indexes </Directory> <FilesMatch \.php$> SetHandler "proxy:unix:/var/run/php/php8.3-fpm.sock|fcgi://localhost" </FilesMatch> <FilesMatch "\.(css|js|jpg|png|gif|ico|svg|woff2)$"> Header set Cache-Control "public, max-age=31536000, immutable" </FilesMatch> ErrorLog ${APACHE_LOG_DIR}/myapp-error.log CustomLog ${APACHE_LOG_DIR}/myapp-access.log combined </VirtualHost> 
Приклад конфігурації для WordPress із додатковою оптимізацією
<VirtualHost *:443> ServerName blog.example.com DocumentRoot /var/www/wp/current SSLEngine on SSLCertificateFile /etc/letsencrypt/live/blog.example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/blog.example.com/privkey.pem Protocols h2 http/1.1 Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" Header always set X-Content-Type-Options "nosniff" <Directory /var/www/wp/current> AllowOverride None Require all granted Options -Indexes +FollowSymLinks # WordPress rewrite rules RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </Directory> <FilesMatch \.php$> SetHandler "proxy:unix:/var/run/php/php8.3-fpm.sock|fcgi://localhost" </FilesMatch> <IfModule mod_expires.c> ExpiresActive On ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/gif "access plus 1 year" ExpiresByType image/png "access plus 1 year" ExpiresByType text/css "access plus 1 month" ExpiresByType application/javascript "access plus 1 month" </IfModule> <IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/css application/json application/javascript DeflateCompressionLevel 6 </IfModule> ErrorLog ${APACHE_LOG_DIR}/wp-error.log CustomLog ${APACHE_LOG_DIR}/wp-access.log combined </VirtualHost> 

Що входить у роботу

  • Аудит поточної конфігурації Apache.
  • Налаштування VirtualHost, SSL (Let's Encrypt), HSTS.
  • Оптимізація MPM event, gzip, кешування.
  • .htaccess під вашу CMS (Laravel, WordPress, Drupal).
  • Впровадження rate limiting і заголовків безпеки.
  • Тестування навантаження (ab, siege) і передача документації.
  • Навчання команди роботі з конфігами та підтримка після деплою.

Оптимізація MPM і кешування для високонавантажених проектів

Перший крок — вибір MPM. Для динамічних сайтів з PHP використовуйте mpm_event. Приклад оптимізації:

<IfModule mpm_event_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxRequestWorkers 150 MaxConnectionsPerChild 0 </IfModule> 

Потім увімкніть стиснення та кешування:

<IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/css application/json application/javascript DeflateCompressionLevel 6 </IfModule> <IfModule mod_expires.c> ExpiresActive On ExpiresByType text/css "access plus 1 year" ExpiresByType application/javascript "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" </IfModule> 

Типова помилка — використання mod_php замість PHP-FPM. Перший споживає на 40% більше пам'яті при пікових навантаженнях. Перехід на PHP-FPM знижує TTFB на 15% і збільшує пропускну здатність у 2 рази.

Чому варто використовувати PHP-FPM з Apache?

PHP-FPM через Unix-сокет знижує затримку на localhost на 20% порівняно з TCP-з'єднанням. Крім того, mod_php споживає на 40% більше пам'яті при пікових навантаженнях, оскільки кожен процес Apache тягне інтерпретатор. PHP-FPM дозволяє гнучко керувати пулом воркерів і окремо налаштовувати php.ini.

Чим Apache відрізняється від Nginx і коли його обирати?

Критерій Apache Nginx
Обробка динаміки mod_php (вбудований) PHP-FPM (зовнішній)
.htaccess Підтримується per-directory Не підтримує
Пам'ять на з'єднання Вища (процес на запит) Нижча (event-driven)
Статика Добре з mod_cache Відмінно з коробки
Гнучкість конфігурації Модульна, багато директив Простіше, менше опцій

Apache краще Nginx у 2 випадках: коли критичний .htaccess (shared-хостинг) або використовуються модулі на кшталт mod_ldap, mod_authnz_ldap. В іншому Nginx дає на 30% більше RPS на статиці.

Порівняння MPM-модулів Apache

Параметр mpm_prefork mpm_worker mpm_event
Тип процесів Один потік на запит Кілька потоків на процес Потоки + подієвий цикл
Пам'ять Висока (1 процес = 1 запит) Середня Низька
Сумісність mod_php, старі застосунки PHP-FPM, Python PHP-FPM, Python, Node
Під навантаженням Швидко виснажує пам'ять Краще prefork Оптимальний для високих навантажень

Процес роботи з налаштування Apache

  1. Аналітика: вивчаємо поточний конфіг, навантаження, CMS.
  2. Проектування: підбираємо MPM, модулі, параметри кешу.
  3. Реалізація: налаштовуємо VirtualHost, SSL, .htaccess, rate limiting.
  4. Тестування: перевіряємо LCP, CLS, TTFB через Lighthouse, навантажувальне тестування.
  5. Деплой: застосовуємо конфіг, моніторимо логи, передаємо документацію.

Типові помилки, яких ми уникаємо:

  • Відсутність Header always set X-Content-Type-Options "nosniff".
  • Неправильні права на DocumentRoot (має бути 755, не 777).
  • Використання mod_php замість PHP-FPM — на 40% більше споживання пам'яті.

Терміни орієнтовно

Базове налаштування Apache з PHP-FPM займає від 1 дня. Повний цикл з оптимізацією, безпекою та навантажувальним тестуванням — до 3 днів. Вартість розраховується індивідуально. Замовте аудит конфігурації — оцінимо проект і запропонуємо рішення під ключ.

Отримайте конфігурацію Apache, що відповідає найкращим практикам, з гарантією стабільної роботи під піковим навантаженням. Зв'яжіться з нами для консультації щодо вашого проекту.