Перейти до змісту

Як встановити останню версію Nginx на Rocky Linux

Вступ

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

Ось короткий виклад того, яку функціональність має Nginx:

  • Базовий веб-сервер
  • Зворотний проксі для спрямування трафіку на кілька сайтів
  • Вбудований балансир навантаження для керування трафіком на кількох веб-сайтах
  • Вбудоване кешування файлів для збільшення швидкості
  • WebSockets
  • Підтримка FastCGI
  • І, звичайно, IPv6

Це чудово! Тож просто sudo dnf install nginx, чи не так? Так, це приблизно так, але ми включили кілька корисних порад, які допоможуть вам почати.

Передумови та припущення

Вам знадобиться:

  • Підключена до Інтернету машина або сервер Rocky Linux.
  • Базове знайомство з командним рядком.
  • Можливість запускати команди від імені root, або від імені root-користувача, або за допомогою sudo.
  • Текстовий редактор на ваш вибір, будь то графічний або заснований на командному рядку. Для цього підручника я використовую nano.

Встановлення та запуск Nginx

По-перше, переконайтеся, що ваша машина оновлена:

sudo dnf update

Потім встановіть пакет nginx:

sudo dnf install nginx

Після завершення встановлення запустіть службу nginx і ввімкніть її автоматичний запуск після перезавантаження:

sudo systemctl enable --now nginx

Щоб перевірити, чи встановлено останню версію Nginx (принаймні, останню версію зі сховищ Rocky), виконайте:

nginx -v

Звідти ви можете просто почати перекидати HTML-файли в каталог /usr/share/nginx/html/, щоб створити простий статичний веб-сайт. Файл конфігурації веб-сайту/віртуального хосту за умовчанням називається «nginx.conf» і знаходиться в /etc/nginx/. Він також містить кілька інших базових конфігурацій сервера Nginx, тому навіть якщо ви перемістите фактичну конфігурацію веб-сайту в інший файл, ви, ймовірно, залишите решту "nginx.conf" недоторканою.

Примітка

У попередніх версіях цього посібника описано встановлення nginx-mainline. Однак це вже не є опцією. У більшості випадків версії Nginx у сховищах Rocky більш ніж достатньо, забезпечуючи стабільну базу з портованими виправленнями безпеки. Ті, хто все ще бажає використовувати nginx-mainline, можуть знайти методи для цього, здійснивши пошук в Інтернеті. Однак усі знайдені документи стосуватимуться Rocky Linux 8. Зауважте, що використання nginx-mainline зазвичай цілком життєздатне, але не підтримується.

Налаштування брандмауера

Примітка

Якщо ви інсталюєте Nginx на такий контейнер, як LXD/LXC або Docker, ви можете поки що пропустити цю частину. Брандмауер має оброблятися головною ОС.

Ймовірно, ви нічого не отримаєте, якщо спробуєте переглянути веб-сторінку за IP-адресою чи доменним іменем свого комп’ютера з іншого комп’ютера. Що ж, це буде так, якщо у вас є та працює брандмауер.

Щоб відкрити необхідні порти, щоб ви могли «бачити» свої веб-сторінки, ми використаємо вбудований брандмауер Rocky Linux, firewalld. Для цього використовується команда firewalld firewall-cmd. Є два способи зробити це: офіційний і ручний. У цьому випадку найкращим є офіційний спосіб, але ви повинні знати обидва для довідки в майбутньому.

Офіційний спосіб відкриває брандмауер для служби http, яка, звичайно, є службою, яка обробляє веб-сторінки. Просто запустіть це:

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

Давайте розберемо це:

  • Прапор -–permanent повідомляє брандмауеру забезпечити використання цієї конфігурації під час кожного перезапуску брандмауера та сервера.
  • –zone=public повідомляє брандмауеру приймати вхідні підключення до цього порту від усіх.
  • Нарешті, --add-service=http повідомляє firewalld пропускати весь HTTP-трафік до сервера.

Now here's the manual way to do it. Це майже те саме, за винятком того, що ви спеціально відкриваєте порт 80, який використовує HTTP.

sudo firewall-cmd --permanent --zone=public --add-port=80/tcp
  • –-add-port=80/tcp повідомляє брандмауеру приймати вхідні з’єднання через порт 80, якщо вони використовують протокол керування передачею, який вам потрібен у цьому випадку.

Щоб повторити процес трафіку SSL/HTTPS, повторно запустіть команду та змініть службу та/або номер порту.

sudo firewall-cmd --permanent --zone=public --add-service=https
# Or, in some other cases:
sudo firewall-cmd --permanent --zone=public --add-port=443/tcp

Ці конфігурації не почнуть діяти, доки ви не примусово усунете проблему. Для цього скажіть firewalld перезапустити свої конфігурації, наприклад:

sudo firewall-cmd --reload

Примітка

Імовірність того, що це не спрацює, дуже мала. У тих рідкісних випадках змусьте firewalld виконувати ваші ставки за допомогою старої функції вимкнути і знову ввімкнути.

systemctl restart firewalld

Щоб переконатися, що порти додано правильно, запустіть firewall-cmd --list-all. Правильно налаштований брандмауер виглядатиме приблизно так:

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp9s0
  sources:
  services: cockpit dhcpv6-client ssh http https
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

І це має бути все, що вам потрібно, з точки зору брандмауера.

Тепер ви зможете побачити веб-сторінку, яка виглядає приблизно так:

Сторінка привітання Nginx

It’s not much at all, but it means the server is working. Ви також можете перевірити, чи ваша веб-сторінка працює з командного рядка за допомогою:

curl -I http://[your-ip-address]

Створення користувача сервера та зміна кореневої папки веб-сайту

Хоча ви можете перемістити свій веб-сайт у каталог за замовчуванням і перейти (і це може бути добре для Nginx, коли він працює всередині контейнера або на сервері тестування/розробки), це не те, що ми називаємо найкращою практикою. Натомість доцільно створити конкретного користувача Linux у вашій системі для вашого веб-сайту та помістити файли веб-сайту в каталог, створений спеціально для цього користувача.

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

У цьому посібнику у мене буде лише один користувач: на ім’я «www». Вирішити, куди розмістити файли веб-сайту, стає складніше.

Ви можете розмістити файли веб-сайту в кількох місцях залежно від налаштувань сервера. Якщо ви користуєтеся «голим металом» (фізичним) сервером або встановлюєте nginx безпосередньо на VPS, можливо, у вас запущено Security Enhanced Linux (SELinux). SELinux — це інструмент, який значною мірою захищає вашу машину, але він також визначає, де ви можете розміщувати певні речі, наприклад веб-сторінки.

Отже, якщо ви встановлюєте nginx безпосередньо на свій комп’ютер, ви захочете розмістити свої веб-сайти в підкаталогах кореневої папки за замовчуванням. У цьому випадку кореневою системою за замовчуванням є /usr/share/nginx/html, тому веб-сайт для користувача «www» може перейти до /usr/share/nginx/html/www.

Однак, якщо ви використовуєте nginx у такому контейнері, як LXD/LXC, SELinux, ймовірно, не буде встановлено, і ви можете розмістити свій файли, де завгодно. У цьому випадку я хочу помістити всі файли веб-сайту користувача в каталог у звичайній домашній папці, наприклад: /home/www/.

Я продовжу цей посібник так, ніби SELinux встановлено. Просто змініть те, що вам потрібно, залежно від вашого випадку використання. Ви також можете дізнатися більше про те, як працює SELinux, у нашому посібнику на цю тему.

Створення користувача

Спочатку ми створюємо папку, яку будемо використовувати:

sudo mkdir /usr/share/nginx/html/www

Далі створіть групу www:

sudo groupadd www

Потім створюємо користувача:

sudo adduser -G nginx -g www -d /usr/share/nginx/html/www www --system --shell=/bin/false

Ця команда повідомляє машині:

  • Зробіть користувача під назвою «www» (відповідно до середнього фрагмента тексту),
  • помістити всі його файли в /usr/share/nginx/html/www,
  • і додайте його до таких груп: «nginx» як додаткову, «www» як основну.
  • Прапорець --system говорить, що користувач не є людиною, він зарезервований для системи. Якщо ви хочете створити облікові записи людей для керування різними веб-сайтами, це зовсім інший посібник.
  • --shell=/bin/false гарантує, що ніхто не зможе навіть спробувати увійти як користувач «www».

Група «nginx» робить справжню магію. Це дозволяє веб-серверу читати та змінювати файли, які належать користувачеві «www» і групі користувачів «www». Додаткову інформацію див. у посібнику з керування користувачами Rocky Linux.

Зміна кореневої папки сервера

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

Наразі просто запустіть:

sudo nano /etc/nginx/conf.d/default.conf

Коли файл відкрито, знайдіть рядок, який виглядає як root /usr/share/nginx/html;. Змініть його на вибрану кореневу папку веб-сайту, наприклад. root /usr/share/nginx/html/www; (або /home/www, якщо ви запускаєте nginx у контейнерах, як я ). Збережіть і закрийте файл, а потім перевірте конфігурацію nginx, щоб переконатися, що ви не пропустили крапку з комою чи щось інше:

nginx -t

Якщо ви отримали наступне повідомлення про успіх, все пройшло правильно:

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

Потім виконайте м’який перезапуск сервера за допомогою:

sudo systemctl reload nginx

Примітка

У малоймовірному випадку, коли м’який перезапуск не спрацює, зробіть наступне:

sudo systemctl restart nginx

Будь-які файли HTML у вашій новій кореневій папці тепер можна переглядати у вашому браузері.

Зміна прав доступу до файлу

Дозволи потрібно встановити правильно, щоб nginx міг читати, записувати та виконувати будь-які файли в каталозі веб-сайту.

По-перше, переконайтеся, що всі файли в кореневій папці належать користувачу сервера та його групі користувачів з:

sudo chown -R www:www /usr/share/nginx/html/www

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

sudo find /usr/share/nginx/html/www -type d -exec chmod 555 "{}" \;
sudo find /usr/share/nginx/html/www -type f -exec chmod 444 "{}" \;

That basically gives everyone the right to look at files on the server, but not modify them. Це можуть зробити лише користувачі root і сервер.

Отримання SSL-сертифікатів для вашого сайту

Наразі наш посібник із отримання сертифікатів SSL за допомогою certbot оновлено деякими основними інструкціями для nginx. Подивіться на це; він містить повні інструкції щодо встановлення Certbot і створення сертифікатів.

Наближається час, коли веб-переглядачі можуть перестати дозволяти людям переглядати сайти без сертифікатів, тому переконайтеся, що ви отримуєте по одному для кожного сайту.

Додаткові параметри конфігурації та посібники

Встановлення стабільної гілки з власного сховища Rocky

Якщо ви хочете використовувати «стабільну» гілку nginx, навіть з її обмеженнями, ось як це зробити. Спочатку переконайтеся, що ваша ОС оновлена:

sudo dnf update

Потім знайдіть останню версію nginx, доступну в сховищах за умовчанням, за допомогою:

sudo dnf module list nginx

У результаті ви отримаєте список, який виглядає так:

Rocky Linux 8 - AppStream
Name       Stream        Profiles        Summary
nginx      1.14 [d]      common [d]      nginx webserver
nginx      1.16          common [d]      nginx webserver
nginx      1.18          common [d]      nginx webserver
nginx      1.20          common [d]      nginx webserver

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

sudo dnf module enable nginx:1.20

Вас запитають, чи хочете ви це зробити, тому виберіть Y, як зазвичай. Потім скористайтеся командою за замовчуванням для встановлення nginx:

sudo dnf install nginx

Потім ви можете ввімкнути службу та налаштувати сервер, як зазначено вище.

Примітка

Файл конфігурації за замовчуванням у цьому випадку знаходиться в базовій папці конфігурації nginx за адресою /etc/nginx/nginx.conf. Проте коренева папка веб-сайту та сама.

Правила SELinux

Пам’ятайте, що при примусовому застосуванні директиви nginx proxy_pass не працюватимуть із «502 Bad Gateway»

Ви можете вимкнути setenforce для цілей розробки

sudo setenforce 0

або ви можете ввімкнути http_d або інші служби, пов’язані з nginx, у /var/log/audit/audit.log

sudo setsebool httpd_can_network_connect 1 -P

Висновок

Базові встановлення та налаштування nginx прості, навіть якщо отримати останню версію складніше, ніж мало б бути. Але дотримуйтесь інструкцій, і ви матимете один із найкращих варіантів сервера, який швидко запрацює.

Тепер вам потрібно піти і створити веб-сайт? Скільки це може зайняти, ще десять хвилин? Тихо ридає у Web Designer

Author: Ezequiel Bruni

Contributors: Antoine Le Morvan, Steven Spencer, Ganna Zhyrnova