Як встановити останню версію Nginx на Rocky Linux¶
Вступ¶
Nginx — це веб-сервер, розроблений як швидкий, ефективний і сумісний практично з усім, що ви можете собі уявити. Особисто я досить часто ним користуюся, і, як тільки ви його зрозумієте, його насправді досить легко встановити та налаштувати. З цією метою я написав цей посібник для початківців.
Ось короткий виклад того, яку функціональність має Nginx:
- Базовий веб-сервер
- Зворотний проксі для спрямування трафіку на кілька сайтів
- Вбудований балансир навантаження для керування трафіком на кількох веб-сайтах
- Вбудоване кешування файлів для збільшення швидкості
- WebSockets
- Підтримка FastCGI
- І, звичайно, IPv6
Це чудово! Тож просто sudo dnf install nginx
, чи не так? Ну не зовсім так. Спершу ми повинні ввімкнути відповідний модуль, щоб дозволити гілку «mainline», щоб ви могли мати останню версію Nginx.
Примітка
Є ще одна гілка під назвою «стабільна», але вона трохи застаріла для більшості випадків використання. Він не отримає жодних нових функцій у міру їх розробки, лише найнеобхідніші виправлення помилок і оновлення безпеки.
Розробники Nginx вважають «основну» гілку добре перевіреною та стабільною для загального використання, оскільки вона отримує абсолютно нові функції, усі виправлення безпеки та всі виправлення помилок.
Єдині причини використання «стабільної» гілки: * Ви справді хочете бути впевнені, що нові функції та значні виправлення не порушать будь-який сторонній чи власний код. * Ви хочете використовувати лише сховища програмного забезпечення Rocky Linux.
У підручнику в кінці цього посібника буде докладно описано, як увімкнути та встановити «стабільну» гілку з мінімальними зусиллями.
Передумови та припущення¶
Вам знадобиться:
- Підключена до Інтернету машина або сервер Rocky Linux.
- Базове знайомство з командним рядком.
- Можливість запускати команди від імені root, або від імені root-користувача, або за допомогою
sudo
. - Текстовий редактор на ваш вибір, будь то графічний або заснований на командному рядку. Для цього підручника я використовую
nano
.
Встановлення репозиторію та ввімкнення модуля¶
По-перше, переконайтеся, що ваша машина оновлена:
sudo dnf update
Потім інсталюйте репозиторій програмного забезпечення epel-release
:
sudo dnf install epel-release
Потім увімкніть відповідний модуль для останньої версії nginx
. Цей модуль завжди називатиметься nginx:manline
, тому просто ввімкніть його за допомогою dnf
так:
sudo dnf module enable nginx:mainline
Ви отримаєте звичайне запитання: "Ви впевнені, що хочете це зробити?" але це не 2-е видання D&D із самим Гері Гігаксом, тому так. Звичайно, що так. Натисніть y для підтвердження.
Встановлення та запуск Nginx¶
Потім встановіть пакет nginx
із раніше доданого репозиторію:
sudo dnf install nginx
Термінал запитає, чи можна встановити ключ GPG сховища. Вам це потрібно, тому виберіть Y
для встановлення.
Після завершення встановлення запустіть службу nginx
і ввімкніть її для автоматичного створення під час перезавантаження «все в одному»:
sudo systemctl enable --now nginx
Щоб перевірити, чи встановлено останню версію Nginx, виконайте:
nginx -v
Ви можете почати перекидати HTML-файли в каталог /usr/share/nginx/html/
, щоб створити простий статичний веб-сайт. Файл конфігурації веб-сайту/віртуального хосту за умовчанням називається «nginx.conf» і знаходиться в /etc/nginx/
. Він також містить кілька інших базових конфігурацій сервера Nginx, тому навіть якщо ви перемістите фактичну конфігурацію веб-сайту в інший файл, ви, ймовірно, залишите решту "nginx.conf" недоторканою.
Налаштування брандмауера¶
Примітка
Якщо ви інсталюєте 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-трафік до сервера.
Тепер ось ручний спосіб зробити це. Це майже те саме, за винятком того, що ви спеціально відкриваєте порт 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:
І це має бути все, що вам потрібно, з точки зору брандмауера.
Тепер ви зможете побачити веб-сторінку, яка виглядає приблизно так:
Це зовсім небагато, але це означає, що сервер працює. Ви також можете перевірити, чи ваша веб-сторінка працює з командного рядка за допомогою:
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 "{}" \;
Це дає кожному право переглядати файли на сервері, але не змінювати їх. Це можуть зробити лише користувачі 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