Як встановити останню версію 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:
І це має бути все, що вам потрібно, з точки зору брандмауера.
Тепер ви зможете побачити веб-сторінку, яка виглядає приблизно так:
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 і створення сертифікатів.
Наближається час, коли веб-переглядачі можуть перестати дозволяти людям переглядати сайти без сертифікатів, тому переконайтеся, що ви отримуєте по одному для кожного сайту.
Додаткові параметри конфігурації та посібники¶
- Якщо ви хочете побачити, як змусити Nginx працювати з PHP, зокрема з PHP-FPM, перегляньте наш посібник із PHP у Rocky Linux.
- Якщо ви хочете дізнатися, як налаштувати Nginx для кількох веб-сайтів, тепер у нас є посібник саме на цю тему.
Встановлення стабільної гілки з власного сховища 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