Заощадьте 15% на всіх хостингових послугах

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

Використовуй код: Skills Почати
Рубрики
Linux Адміністрація

Встановлення та налаштування Nginx на CentOS 7: Повний покроковий посібник

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

Незалежно від того, чи ви запускаєте особистий блог, високонавантажену платформу електронної комерції чи складну архітектуру мікросервісів, Nginx забезпечує швидкість та надійність, яких вимагають ваші користувачі. Цей комплексний посібник проведе вас через кожен крок встановлення, налаштування, захисту та оптимізації Nginx на сервері CentOS 7 — від підготовки системи до включення HTTPS з безплатним SSL-сертифікатом Let’s Encrypt.

> Передумови: Сервер CentOS 7 з доступом root або sudo. Якщо вам потрібне надійне, високопродуктивне середовище для виконання цих кроків, розгляньте можливість використання VPS Hosting від AlexHost — спеціально розроблено для вимогливих робочих навантажень з повним доступом root і сховищем SSD.

Крок 1: Оновіть вашу систему

Перед встановленням будь-якого нового програмного забезпечення критично важливо переконатися, що ваша система CentOS 7 повністю оновлена. Застарілі пакети можуть привести до вразливостей безпеки та конфліктів залежностей, які ускладнюють процес встановлення.

Відкрийте ваш термінал і виконайте наступну команду:

sudo yum update -y

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

Крок 2: Встановлення Nginx через YUM

Nginx недоступний у стандартних репозиторіях CentOS 7. Спочатку необхідно встановити репозиторій EPEL (Extra Packages for Enterprise Linux), який надає широкий спектр додаткових пакетів програмного забезпечення для дистрибутивів на основі RHEL.

Встановіть репозиторій EPEL:

sudo yum install epel-release -y

Встановіть Nginx:

sudo yum install nginx -y

Ця команда завантажує та встановлює Nginx разом з усіма необхідними залежностями. Після завершення встановлення ви можете перевірити встановлену версію за допомогою:

nginx -v

Ви повинні побачити вихід, подібний до:

nginx version: nginx/1.20.x

Крок 3: Запуск і включення служби Nginx

З встановленим Nginx вам потрібно запустити службу та налаштувати її для автоматичного запуску кожного разу, коли сервер перезавантажується.

Запустіть службу Nginx:

sudo systemctl start nginx

Включіть Nginx для запуску під час завантаження:

sudo systemctl enable nginx

Перевірте статус служби, щоб підтвердити, що вона працює:

sudo systemctl status nginx

Ви повинні побачити вихідні дані, що вказують на те, що служба активна (запущена):

● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; ...)
   Active: active (running) since ...

Якщо служба не запускається, перегляньте журнали помилок на /var/log/nginx/error.log для діагностичної інформації.

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

CentOS 7 використовує firewalld як інструмент управління брандмауером за замовчуванням. За замовчуванням трафік HTTP (порт 80) та HTTPS (порт 443) блокується. Ви повинні явно відкрити ці порти, щоб дозволити веб-трафіку досягти вашого сервера Nginx.

Дозволити трафік HTTP:

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

Дозволити трафік HTTPS:

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

Перезавантажити брандмауер для застосування змін:

sudo firewall-cmd --reload

Перевірити активні правила:

sudo firewall-cmd --list-all

Ви повинні побачити обидва http та https у розділі services виведення. Якщо ваш сервер розміщений за зовнішнім брандмауером або групою безпеки (поширено у хмарних провайдерів), переконайтеся, що ці правила також оновлені для дозволу трафіку на портах 80 та 443.

Крок 5: Перевірка встановлення

Щоб підтвердити, що Nginx встановлено правильно і він обслуговує вміст, відкрийте веб-браузер і перейдіть на публічну IP-адресу вашого сервера:

http://your_server_ip

Вас повинна привітати сторінка привітання Nginx за замовчуванням, на якій відображається повідомлення *"Welcome to nginx!"*. Це підтверджує, що веб-сервер працює і доступний з інтернету.

Якщо ви не бачите сторінку привітання, перевірте наступне:

  • Сервіс Nginx запущений (sudo systemctl status nginx)
  • Правила брандмауера застосовані правильно
  • IP-адреса вашого сервера правильна
  • Жоден інший сервіс (такий як Apache) не займає порт 80

Крок 6: Налаштування блоків сервера Nginx

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

Основний файл конфігурації Nginx розташований у /etc/nginx/nginx.conf. Він містить директиву, яка автоматично завантажує всі файли .conf з каталогу conf.d, зберігаючи вашу конфігурацію модульною та легкою в управлінні.

Крок 6a: Створення нового файла конфігурації блоку сервера

Створіть новий файл конфігурації для вашого домену. Замініть example.com на ваше фактичне ім’я домену:

sudo nano /etc/nginx/conf.d/example.com.conf

Додайте наступну конфігурацію блоку сервера:

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

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

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

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

    # Deny access to hidden files
    location ~ /. {
        deny all;
    }
}

Пояснення ключових директив:

ДирективаОпис
listen 80Наказує Nginx прослуховувати вхідні з’єднання на порту 80 (HTTP)
server_nameВизначає імена доменів, на які відповідає цей блок сервера
rootВказує каталог документів, де зберігаються файли веб-сайту
indexВизначає файли за замовчуванням, які Nginx буде обслуговувати при запиті каталогу
try_filesНамагається обслужити запитаний URI як файл, потім як каталог, і повертає 404, якщо ні один не існує
access_log / error_logВизначає окремі файли журналу для цього віртуального хоста для простішого налагодження

Збережіть файл і вийдіть з редактора (Ctrl+X, потім Y, потім Enter у nano).

Крок 7: Створення кореневої директорії документів та тестового файлу

Створіть директорію кореневої папки документів, яку ви визначили в конфігурації блоку сервера:

sudo mkdir -p /var/www/example.com/html

Створіть простий index.html файл для перевірки правильної роботи блоку сервера:

echo "<h1>Welcome to Example.com — Powered by Nginx on CentOS 7!</h1>" | sudo tee /var/www/example.com/html/index.html

Встановіть правильне володіння та дозволи, щоб Nginx міг читати файли:

sudo chown -R nginx:nginx /var/www/example.com/
sudo chmod -R 755 /var/www/example.com/

> Примітка щодо SELinux: CentOS 7 поставляється з увімкненим SELinux за замовчуванням. Якщо Nginx не може читати ваші веб-файли навіть з правильними дозволами, вам може знадобитися застосувати відповідний контекст SELinux:

> “`bash

> sudo chcon -Rt httpd_sys_content_t /var/www/example.com/

> “`

Крок 8: Тестування конфігурації Nginx

Перед перезапуском Nginx для застосування нової конфігурації завжди перевіряйте синтаксис на помилки. Неправильно налаштований файл може вивести з ладу весь ваш веб-сервер.

Запустіть тест конфігурації:

sudo nginx -t

Успішний тест дає такий результат:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Якщо повідомлено про помилки, уважно перегляньте вказані номери рядків у ваших файлах конфігурації та виправте будь-які проблеми перед тим, як продовжити.

Перезапустіть Nginx для застосування змін:

sudo systemctl restart nginx

Крім того, якщо ви хочете перезавантажити конфігурацію без розриву активних з’єднань (рекомендується для виробничих середовищ), використовуйте:

sudo systemctl reload nginx

Тепер перейдіть до вашого домену в браузері. Ви повинні побачити вашу користувацьку index.html сторінку.

Крок 9: Налаштування HTTPS з Let’s Encrypt

Запуск веб-сайту через простий HTTP піддає ваших користувачів потенційному підслуховуванню та атакам «людина посередині». Захист вашого сайту за допомогою HTTPS більше не є опціональним — це фундаментальна вимога для довіри користувачів, цілісності даних та рейтингу в пошукових системах.

Let’s Encrypt надає безплатні, автоматизовані та надійні SSL/TLS сертифікати. Ви також можете дослідити преміум SSL сертифікати від AlexHost для розширеної перевірки та варіантів з валідацією організації, які пропонують вищі рівні довіри для бізнес-веб-сайтів.

Встановлення Certbot та плагіна Nginx

sudo yum install certbot python2-certbot-nginx -y

Отримання та встановлення SSL сертифіката

Запустіть Certbot з плагіном --nginx, який автоматично змінює вашу конфігурацію Nginx для включення HTTPS:

sudo certbot --nginx -d example.com -d www.example.com

Дотримуйтесь інтерактивних підказок:

  1. Введіть вашу адресу електронної пошти для сповіщень про поновлення
  2. Погодьтесь з Умовами обслуговування Let’s Encrypt
  3. Виберіть, чи перенаправляти трафік HTTP на HTTPS (настійно рекомендується — виберіть варіант 2)

Certbot автоматично:

  • Отримає підписаний сертифікат від Let’s Encrypt
  • Змінить вашу /etc/nginx/conf.d/example.com.conf для включення директив SSL
  • Налаштує перенаправлення з HTTP на HTTPS

Після завершення перевірте конфігурацію HTTPS, відвідавши:

https://example.com

Ваш браузер повинен відобразити значок замка, що підтверджує, що з’єднання зашифровано.

Крок 10: Автоматизація поновлення сертифіката

Сертифікати Let's Encrypt дійсні протягом 90 днів. Якщо не поновити їх до закінчення терміну дії, ваш сайт буде показувати попередження про безпеку відвідувачам, що серйозно вплине на довіру користувачів та трафік.

Тестування процесу поновлення

Перед налаштуванням автоматизації перевірте, що процес поновлення працює правильно:

sudo certbot renew --dry-run

Успішне тестування підтверджує, що автоматичне поновлення працюватиме без проблем.

Налаштування завдання Cron для автоматичного поновлення

Відкрийте кореневий crontab:

sudo crontab -e

Додайте наступний рядок для перевірки та поновлення сертифікатів двічі на день (рекомендована частота):

0 0,12 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"

Пояснення розкладу cron:

    0 0,12 * * * — Запускається о півночі та в полудень щодня
    --quiet — Придушує вивід, якщо не виникає помилка
    --post-hook "systemctl reload nginx" — Перезавантажує Nginx після успішного поновлення для застосування нового сертифіката без простоїв
    
    Збережіть та закрийте редактор crontab. Ваші SSL сертифікати тепер будуть поновлюватися автоматично, зберігаючи ваш сайт в безпеці без будь-якого ручного втручання.
    Поради з оптимізації продуктивності Nginx на CentOS 7
    Після завершення базового налаштування розглянете ці поліпшення конфігурації для максимізації продуктивності Nginx:
    Увімкніть стиснення Gzip
    Додайте наступне до вашого nginx.conf у блоці http {} для зменшення розміру відповідей, надісланих клієнтам:
    gzip on;
    gzip_vary on;
    gzip_min_length 1024;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;
    Налаштуйте кешування браузера
    Додайте заголовки cache-control для статичних ресурсів, щоб зменшити навантаження на сервер і поліпшити час завантаження сторінки:
    location ~* .(jpg|jpeg|png|gif|ico|css|js|woff|woff2)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }
    Налаштуйте робочі процеси
    У /etc/nginx/nginx.conf встановіть кількість робочих процесів, щоб вона відповідала кількості ядер CPU вашого сервера:
    worker_processes auto;
    worker_connections 1024;
    > Для ресурсомістких додатків або веб-сайтів з високим трафіком розглянете можливість переходу на Виділені сервери від AlexHost, які забезпечують гарантовані ресурси CPU, RAM та сховища без ефекту шумного сусіда.
    Керування кількома веб-сайтами за допомогою Nginx
    Однією з найбільших переваг Nginx є його здатність розміщувати кілька веб-сайтів на одному сервері через блоки сервера. Для кожного додаткового домену просто:
    
    Створіть новий .conf файл у /etc/nginx/conf.d/
  • Визначте унікальну директиву server_name
  • Вкажіть директиву root на відповідний корінь документа
  • Запустіть sudo nginx -t та sudo systemctl reload nginx
  • Якщо ви віддаєте перевагу графічному інтерфейсу для керування вашим веб-сервером, віртуальними хостами, базами даних та облікові записи електронної пошти, розгляньте VPS з cPanel — повністю керовану панель керування, яка спрощує адміністрування сервера без втрати гнучкості.

    Крім того, дослідіть повний спектр Панелей керування VPS, доступних від AlexHost, включаючи Plesk, DirectAdmin та інші варіанти, придатні для різних робочих процесів та технічних переваг.

    Усунення типових проблем Nginx на CentOS 7

    ПроблемаЙмовірна причинаРішення
    Nginx не запускаєтьсяПорт 80/443 уже використовуєтьсяЗапустіть `sudo ss -tlnpgrep :80` щоб визначити конфліктуючий процес
    Помилка 403 ForbiddenНеправильні дозволи файлів або контекст SELinuxПеревірте chmod/chown та застосуйте chcon для SELinux
    502 Bad GatewayUpstream-сервіс (PHP-FPM, Node.js) не запущенийПереконайтеся, що сервіс backend активний та сокет/порт правильні
    SSL-сертифікат не оновлюєтьсяCertbot не може прив’язатися до порту 80Переконайтеся, що порт 80 відкритий та жоден інший процес його не блокує
    Зміни не вступають у силуКонфігурація не перезавантаженаЗапустіть sudo systemctl reload nginx після кожної зміни конфігурації

    Висновок

    Ви успішно встановили, налаштували та захистили Nginx на CentOS 7. Ваш сервер готовий розміщувати веб-сайти з високою продуктивністю, ефективно обробляти одночасні з’єднання та надавати вміст через зашифровані HTTPS з’єднання — все це важливі якості для сучасного виробничого веб-середовища.

    Ось резюме того, що було досягнуто:

    • ✅ Оновлена система CentOS 7 та встановлений Nginx через репозиторій EPEL
    • ✅ Запущена та увімкнена служба Nginx для автоматичного запуску при завантаженні
    • ✅ Налаштований firewalld для дозволу трафіку HTTP та HTTPS
    • ✅ Створений та налаштований користувацький блок сервера для домену
    • ✅ Встановлені правильні дозволи файлів та контексти SELinux для кореневої папки документів
    • ✅ Протестована конфігурація на помилки синтаксису перед застосуванням змін
    • ✅ Захищений сайт безкоштовним SSL-сертифікатом Let’s Encrypt через Certbot
    • ✅ Автоматизоване поновлення сертифіката за допомогою завдання cron

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

    Якщо ви шукаєте надійну основу хостингу для своїх проектів на базі Nginx, AlexHost пропонує повний спектр рішень — від початкового Спільного веб-хостингу для менших сайтів до високопродуктивних VPS та виділеної інфраструктури для вимогливих додатків. Кожен план підтримується обладнанням корпоративного класу, цілодобовою технічною підтримкою та зобов’язанням щодо безперебійної роботи та безпеки.