Як встановити останню версію 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` виконувати ваші ставки за допомогою старої функції вимкнути і знову ввімкнути.
```bash
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:
І це має бути все, що вам потрібно, з точки зору брандмауера.
Тепер ви зможете побачити веб-сторінку, яка виглядає приблизно так:

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 (../../books/admin_guide/06-users.md) для отримання додаткової інформації.
Зміна кореневої папки сервера¶
Тепер, коли у вас є новий обліковий запис користувача, час налаштувати 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
Примітка
У малоймовірному випадку, коли м’який перезапуск не спрацює, зробіть наступне:
```bash
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 і створення сертифікатів.
Наближається час, коли веб-переглядачі можуть перестати дозволяти людям переглядати сайти без сертифікатів, тому переконайтеся, що ви отримуєте по одному для кожного сайту.
Додаткові параметри конфігурації та посібники¶
- Якщо ви хочете побачити, як змусити Nginx працювати з PHP, зокрема з PHP-FPM, перегляньте наш посібник із PHP у Rocky Linux.
- Якщо ви хочете дізнатися, як налаштувати Nginx для кількох веб-сайтів, тепер у нас є посібник саме на цю тему.
Правила 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 прості, навіть якщо отримати останню версію складніше, ніж мало б бути. Але дотримуйтесь інструкцій, і ви матимете один із найкращих варіантів сервера, який швидко запрацює.
Тепер вам потрібно піти і створити веб-сайт? Скільки це може зайняти, ще десять хвилин? Тихо ридає у веб-дизайнері
Author: Ezequiel Bruni
Contributors: Antoine Le Morvan, Steven Spencer, Ganna Zhyrnova