Налаштування веб-сервера Apache
Apache HTTP Server — це зрілий веб-сервер з модульною архітектурою. Широко використовується на спільному хостингу, у поєднанні з PHP через mod_php або mod_proxy_fcgi, у корпоративних середовищах з LDAP/Kerberos.
Встановлення та базові модулі
apt install -y apache2
a2enmod rewrite ssl headers proxy proxy_fcgi setenvif http2
systemctl restart apache2
VirtualHost для Laravel
# /etc/apache2/sites-available/myapp.conf
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://example.com/
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
ServerAlias www.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"
Header always set X-Content-Type-Options "nosniff"
<Directory /var/www/myapp/current/public>
AllowOverride All
Require all granted
Options -Indexes
</Directory>
# PHP-FPM через сокет
<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>
.htaccess для Laravel
# public/.htaccess
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# HTTPS редирект (якщо не обробляється VirtualHost)
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Дозволити доступ до існуючих файлів
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
# Перенаправити все на index.php
RewriteRule ^ index.php [L]
</IfModule>
# Вимкнути вихід версії сервера
ServerSignature Off
# Заборонити доступ до .env
<Files ".env">
Require all denied
</Files>
Продуктивність
# /etc/apache2/mods-enabled/mpm_event.conf
<IfModule mpm_event_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>
# Включити gzip
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css application/json application/javascript
DeflateCompressionLevel 6
</IfModule>
# mod_expires
<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_ratelimit
a2enmod ratelimit
# У VirtualHost
SetOutputFilter RATE_LIMIT
SetEnv rate-limit 400 # 400 KB/s
Зворотний проксі
a2enmod proxy proxy_http
<VirtualHost *:443>
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Real-IP %{REMOTE_ADDR}s
</VirtualHost>
Apache проти Nginx
Apache є кращим вибором коли: потрібен .htaccess (спільний хостинг), використовується mod_php, є складні конфіги для окремих директорій, потрібні специфічні модулі Apache. В інших випадках Nginx показує кращу продуктивність на статичному контенті та менше споживання пам'яті.
Лінія часу
Базова конфігурація Apache з PHP-FPM: 1 день. Оптимізація продуктивності та безпеки: +1 день.







