Nginx споживає значно менше пам'яті та обробляє статику в рази швидше за Apache. Перехід виправданий за високих навантажень або обмежених ресурсів сервера. Головна складність — конвертація .htaccess у синтаксис location-блоків Nginx.
Apache vs Nginx: ключові відмінності
| Аспект | Apache | Nginx |
|---|---|---|
| Архітектура | Process/Thread | Event-driven (асинхронна) |
| Статичні файли | Повільніше | У 2–4 рази швидше |
| Споживання RAM | Більше (fork per request) | Менше (worker processes) |
| PHP | mod_php (вбудований) | Тільки через PHP-FPM |
| .htaccess | Підтримується | Не підтримується |
| Конфігурація | Подиректорійно (.htaccess) | Централізована |
Встановлення Nginx і PHP-FPM
# Встановити Nginx і PHP-FPM
apt install nginx php8.3-fpm -y
# Зупинити Apache
systemctl stop apache2
systemctl disable apache2
# Запустити Nginx
systemctl enable --now nginx
Конвертація Apache Virtual Host → Nginx Server Block
># Apache VirtualHost (було)
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html
DirectoryIndex index.php index.html
AllowOverride All
</VirtualHost>
# Nginx Server Block (стало)
server {
listen 80;
server_name example.com www.example.com;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
Конвертація правил .htaccess
># .htaccess: Redirect (було)
Redirect 301 /old-page.html /new-page
# Nginx (стало)
location = /old-page.html {
return 301 /new-page;
}
# .htaccess: RewriteRule
RewriteRule ^products/([0-9]+)$ product.php?id=$1 [L]
# Nginx:
location ~ ^/products/([0-9]+)$ {
rewrite ^/products/([0-9]+)$ /product.php?id=$1 last;
}
# .htaccess: заборона доступу до директорії
Options -Indexes
# Nginx:
location /private/ {
deny all;
}
# .htaccess: власні сторінки помилок
ErrorDocument 404 /404.php
# Nginx:
error_page 404 /404.php;
Nginx для WordPress (повний конфіг)
>server {
listen 443 ssl http2;
server_name example.com www.example.com;
root /var/www/wordpress;
# Gzip-стиснення
gzip on;
gzip_types text/css application/javascript text/html;
# Статичні файли — кеш
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 300;
include fastcgi_params;
}
}
Конвертер .htaccess: Використовуйте онлайн-інструмент winginx.com/htaccess для автоматичної конвертації правил .htaccess у синтаксис Nginx. Потім обов'язково перевірте результат вручну.
.htaccess у Nginx ігнорується — файли залишаються на диску, але не обробляються. Якщо сайт використовує .htaccess для редиректів або захисту директорій, усі правила потрібно перенести в конфіг Nginx вручну.