До основного вмісту

Міграція з Apache на Nginx: конвертація конфігів і .htaccess

Міграція · 19.04.2026 · 2 хв читання
Ілюстрація до статті «Міграція з Apache на Nginx: конвертація конфігів і .htaccess»

Nginx споживає значно менше пам'яті та обробляє статику в рази швидше за Apache. Перехід виправданий за високих навантажень або обмежених ресурсів сервера. Головна складність — конвертація .htaccess у синтаксис location-блоків Nginx.

Apache vs Nginx: ключові відмінності

АспектApacheNginx
АрхітектураProcess/ThreadEvent-driven (асинхронна)
Статичні файлиПовільнішеУ 2–4 рази швидше
Споживання RAMБільше (fork per request)Менше (worker processes)
PHPmod_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 вручну.
Чи була стаття корисною?
← Назад до бази знань Поставити питання підтримці