15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати
31.10.2024
1 +1

Що таке веб-сервер Nginx? Повний посібник з встановлення, конфігурації та найкращих практик

Nginx (вимовляється "engine-x") став одним з найбільш розповсюджених веб-серверів в інтернеті — і це не випадково. Від забезпечення роботи високонавантажених платформ електронної комерції до виконання ролі зворотного проксі для складних архітектур мікросервісів, Nginx забезпечує виключну продуктивність, масштабованість та безпеку в легкому та ефективному пакеті.

У цьому комплексному посібнику ми розберемо, що саме таке Nginx, як працює його архітектура, як він порівнюється з Apache, і як запустити його на власному сервері — з урахуванням найкращих практик безпеки та продуктивності.

Що таке Nginx?

Nginx — це безплатне програмне забезпечення веб-сервера з відкритим кодом, яке доставляє веб-сторінки та вміст додатків користувачам через інтернет. Спочатку випущений у 2004 році Ігором Сисоєвим для вирішення проблеми "C10K" (обробка 10 000 одночасних з’єднань), Nginx з тих пір виріс у повнофункціональну платформу, яку використовують мільйони веб-сайтів у всьому світі.

Те, що відрізняє Nginx від традиційних веб-серверів, — це його архітектура, керована подіями, асинхронна, неблокуюча. Замість того, щоб створювати новий потік або процес для кожного вхідного запиту (як це роблять старіші сервери), Nginx використовує невелику кількість робочих процесів для обробки тисяч одночасних з’єднань з мінімальними витратами пам’яті та CPU.

Це робить Nginx ідеальним вибором, чи ви запускаєте простий статичний веб-сайт на спільному веб-хостингу або керуєте високодоступним стеком додатків на виділеному сервері.

Ключові особливості Nginx

⚡ Висока продуктивність

Nginx виключно ефективний при обслуговуванні статичного вмісту — HTML-файлів, CSS-таблиць стилів, JavaScript-пакетів, зображень та відео — з дуже низьким споживанням ресурсів. Навіть під великим навантаженням він підтримує швидкі часи відповіді.

⚖️ Балансування навантаження

Nginx може розподіляти вхідний трафік між кількома серверами бекенду, використовуючи кілька алгоритмів (round-robin, найменше з’єднань, IP-хеш), оптимізуючи використання ресурсів та усуваючи єдині точки відмови.

🔁 Зворотний проксі

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

🔒 Завершення SSL/TLS

Nginx обробляє шифрування SSL/TLS вбудовано, перекладаючи обчислювальні витрати шифрування з серверів вашого додатку. Поєднання Nginx з надійним SSL-сертифікатом забезпечує шифрування всіх даних при передачі та дає вашому сайту сигнали довіри, які очікують користувачі та пошукові системи.

🌐 Широка сумісність додатків

Nginx безперебійно інтегрується з сучасними мовами програмування та фреймворками, включаючи PHP (через PHP-FPM), Python (Django, Flask), Ruby on Rails, Node.js та Go.

🗜️ Стиснення Gzip та кешування

Вбудована підтримка стиснення Gzip та кешування відповідей значно зменшує використання пропускної здатності та прискорює доставку вмісту кінцевим користувачам.

Як працює Nginx? Розуміння архітектури

Щоб оцінити, чому Nginx працює так добре, корисно зрозуміти його внутрішню модель.

Керована подіями, неблокуюча введення-виведення

Традиційні веб-сервери, такі як старіші версії Apache, використовують модель процес на з’єднання або потік на з’єднання. Кожен новий запит створює новий процес або потік, який споживає пам’ять та CPU. При високій одночасності цей підхід не масштабується добре.

Nginx використовує принципово інший підхід:

  1. Один головний процес читає конфігурацію та керує робочими процесами.
  2. Кілька робочих процесів (зазвичай один на ядро CPU) кожен обробляє тисячі з’єднань, використовуючи неблокуюче введення-виведення та цикл подій.
  3. Коли робочий процес чекає на повільну операцію (наприклад, читання з диска або відповідь від вищестоящого сервера), він не сидить без діла — він обробляє інші події в черзі.

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

Потік обробки запиту

Client Request
      ↓
Nginx (Master Process)
      ↓
Worker Process (Event Loop)
      ↓
Static File? → Serve directly from disk
      ↓
Dynamic Content? → Forward to upstream (PHP-FPM, Node.js, etc.)
      ↓
Response returned to client

Поширені варіанти використання Nginx

Варіант використанняОпис
Веб-серверОбслуговування статичних та динамічних веб-сайтів з високою швидкістю та надійністю
Зворотний проксіМаршрутизація запитів до серверів додатків, покращення безпеки та продуктивності
Балансувальник навантаженняРозподіл трафіку між пулами серверів для високої доступності
Шлюз APIУправління, маршрутизація та регулювання трафіку API до мікросервісів
Потокова передача медіаЕфективна потокова передача відео та аудіовмісту
Завершення SSLОбробка шифрування HTTPS перед передачею запитів на сервери бекенду

Nginx проти Apache: Який вибрати?

Як Nginx, так і Apache — це веб-сервери виробничого рівня, але вони підходять для різних сценаріїв. Ось пряме порівняння:

ФункціяNginxApache
АрхітектураКерована подіями, асинхроннаКерована процесами/потоками
Статичний вмістВиключно швидкоПомірно
Динамічний вмістЧерез зовнішні процесори (PHP-FPM)Вбудовано через модулі (mod_php)
ОдночасністьВідмінна (тисячі з’єднань)Добра, але ресурсомісткіша
КонфігураціяЦентралізована, чистий синтаксисРозподілена (підтримка .htaccess)
Екосистема модулівЗростаюча, скомпільованаРозширена, динамічно завантажувана
Використання пам’ятіНизькеВище під навантаженням
Найкраще дляВисоконавантажені сайти, проксування, APIСпільний хостинг, застарілі додатки

Висновок: Для високонавантажених веб-сайтів, налаштувань зворотного проксі та сучасних стеків додатків Nginx зазвичай є кращим вибором. Apache залишається популярним у середовищах, які сильно покладаються на файли .htaccess або специфічні модулі Apache.

Якщо вам потрібна потужність Nginx з зручним інтерфейсом управління, розгляньте VPS з cPanel або дослідіть повний спектр панелей керування VPS, доступних з рішеннями хостингу AlexHost.

Як встановити та налаштувати Nginx на Linux

Давайте розглянемо повне практичне налаштування Nginx на сервері Linux.

Передумови

  • Сервер Linux, що працює на Ubuntu, Debian, CentOS або RHEL
  • Доступ root або sudo
  • Зареєстроване доменне ім’я (ви можете зареєструвати домен через AlexHost)

Крок 1: Встановлення Nginx

На Ubuntu / Debian:

sudo apt update
sudo apt install nginx -y

На CentOS / RHEL:

sudo yum install epel-release -y
sudo yum install nginx -y

Крок 2: Запуск та включення Nginx

Запустіть сервіс та налаштуйте його для автоматичного запуску при завантаженні системи:

sudo systemctl start nginx
sudo systemctl enable nginx

Перевірте, чи він працює:

sudo systemctl status nginx

Ви повинні побачити active (running) у виводі. Ви також можете відкрити IP-адресу вашого сервера в браузері — ви побачите сторінку привітання Nginx за замовчуванням.

Крок 3: Налаштування брандмауера

Дозвольте трафік HTTP та HTTPS через ваш брандмауер:

UFW (Ubuntu/Debian):

sudo ufw allow 'Nginx Full'
sudo ufw reload

Firewalld (CentOS/RHEL):

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

Крок 4: Розуміння структури конфігурації Nginx

Конфігурація Nginx організована наступним чином:

/etc/nginx/
├── nginx.conf              ← Main configuration file
├── sites-available/        ← Virtual host config files (inactive)
│   └── example.com
├── sites-enabled/          ← Symlinks to active virtual hosts
│   └── example.com → ../sites-available/example.com
├── conf.d/                 ← Additional configuration snippets
└── snippets/               ← Reusable config fragments

Головний файл nginx.conf визначає глобальні параметри (робочі процеси, логування, типи MIME), тоді як окремі блоки сервера (еквівалент віртуальних хостів Apache у Nginx) визначають, як обробляється кожен домен або додаток.

Крок 5: Створення блоку сервера для вашого домену

Створіть новий файл конфігурації для вашого веб-сайту:

sudo nano /etc/nginx/sites-available/example.com

Вставте наступну конфігурацію (замініть example.com на ваш фактичний домен):

server {
    listen 80;
    listen [::]:80;

    server_name example.com www.example.com;
    root /var/www/example.com/html;
    index index.html index.htm index.php;

    access_log /var/log/nginx/example.com.access.log;
    error_log  /var/log/nginx/example.com.error.log;

    location / {
        try_files $uri $uri/ =404;
    }
}

Включіть сайт, створивши символічне посилання:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Перевірте конфігурацію на помилки синтаксису:

sudo nginx -t

Перезавантажте Nginx, щоб застосувати зміни:

sudo systemctl reload nginx

Крок 6: Створення каталогу веб-кореня

sudo mkdir -p /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example.com/html
echo "<h1>Welcome to example.com</h1>" > /var/www/example.com/html/index.html

Крок 7: Включення HTTPS з SSL/TLS

Обслуговування вашого сайту через HTTPS є обов’язковим для безпеки, SEO та довіри користувачів. Найпростіший спосіб додати безплатний SSL — це Certbot (Let’s Encrypt):

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.com -d www.example.com

Certbot автоматично змінить ваш блок сервера Nginx для обробки HTTPS та налаштує автоматичне поновлення сертифіката.

Для виробничих середовищ та сайтів електронної комерції розгляньте премію SSL-сертифікат для розширеної перевірки та покриття гарантії.

Конфігурація Nginx для поширених сценаріїв

Конфігурація зворотного проксі

Перенаправте запити до додатку Node.js, що працює на порту 3000:

server {
    listen 80;
    server_name api.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_cache_bypass $http_upgrade;
    }
}

Конфігурація балансування навантаження

Розподіліть трафік між трьома серверами бекенду:

upstream backend_pool {
    least_conn;  # Use least-connections algorithm
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
    server 192.168.1.12:8080;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend_pool;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Інтеграція PHP-FPM

Обслуговування додатку PHP (наприклад, WordPress):

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

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

    location ~ .php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    }

    location ~ /.ht {
        deny all;
    }
}

Найкращі практики безпеки для Nginx

Захист вашої установки Nginx так само важливий, як і її правильна конфігурація. Дотримуйтесь цих кроків посилення:

1. Приховування інформації про версію Nginx

Розкриття версії вашого сервера допомагає зловмисникам спрямовувати відомі вразливості. Вимкніть це:

# In the http block of nginx.conf
server_tokens off;

2. Включення SSL/TLS з сильними наборами шифрів

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;

3. Додавання заголовків безпеки

add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

4. Обмеження розміру та швидкості запиту

Захист від DDoS-атак та зловживання:

# Limit body size (e.g., for file uploads)
client_max_body_size 10M;

# Rate limiting zone
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;

# Apply rate limiting to a location
location /api/ {
    limit_req zone=api_limit burst=20 nodelay;
}

5. Обмеження доступу за допомогою внесення IP-адрес у білий список

location /admin/ {
    allow 203.0.113.0/24;   # Your office IP range
    deny all;
}

6. Вимкнення непотрібних методів HTTP

if ($request_method !~ ^(GET|HEAD|POST)$) {
    return 444;
}

Найкращі практики оптимізації продуктивності

Включення стиснення Gzip

gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;

Налаштування кешування браузера

location ~* .(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
}

Включення HTTP/2

HTTP/2 значно покращує продуктивність завантаження сторінки

15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати