Як налаштувати Nginx для кількох веб-сайтів у Rocky Linux¶
Вступ¶
Ось мій обіцяний посібник із багатосайтових налаштувань Nginx у Rocky Linux. Почну з примітки для початківців; решта ви знаєте, для чого ви тут, тому прокрутіть вниз.
Привіт новачки! Однією з речей, які Nginx робить дуже добре, є спрямування трафіку з однієї центральної точки на кілька веб-сайтів і програм на одному сервері або на кількох інших серверах. Ця функція називається «зворотний проксі», і відносна легкість, з якою Nginx це робить, є однією з причин, чому я почав її використовувати.
Тут я покажу вам, як керувати декількома веб-сайтами в одній інсталяції Nginx і як це робити простим і організованим способом, який дозволить швидко й легко вносити зміни.
Для тих, хто шукає подібне налаштування для Apache, перегляньте цей посібник.
Я поясню багато деталей... але, зрештою, весь процес передбачає налаштування деяких папок і створення невеликих текстових файлів. У цьому посібнику ми не будемо використовувати надто складні конфігурації веб-сайтів. Коли ви дізнаєтесь, як це зробити, це займе лише кілька хвилин, щоб виконувати кожен раз. Це легко.*
* Для заданих значень "легко".
Передумови та припущення¶
Це все, що вам знадобиться:
- Сервер Rocky Linux, підключений до Інтернету, на якому вже працює Nginx. Якщо ви ще не зайшли так далеко, ви можете спочатку слідувати нашому посібнику зі встановлення Nginx.
Деякий комфорт із виконанням завдань у командному рядку та встановленням термінального текстового редактора, наприклад
nano
.У крайньому випадку
... ви можете використати щось на кшталт Filezilla або WinSCP — і звичайний текстовий редактор на основі графічного інтерфейсу користувача — щоб відтворити більшість цих кроків, але в цьому підручнику ми будемо робити все простим шляхом.
Принаймні один домен вказує на ваш сервер для одного з тестових веб-сайтів. Ви можете використовувати або другий домен, або субдомен для іншого.
Підказка
Налаштуйте свій хост-файл для створення імітованих доменних імен, якщо ви робите це на локальному сервері. Інструкції нижче.
Ми припускаємо, що ви використовуєте Nginx на голому сервері або звичайному VPS і SELinux працює. Усі інструкції будуть сумісні з SELinux за замовчуванням.
- Усі команди потрібно запускати від імені користувача root, увійшовши в систему як користувач root або використовуючи
sudo
.
Налаштування ваших папок і тестових сайтів¶
Папки сайту¶
По-перше, вам знадобиться кілька папок для файлів вашого сайту. Коли ви вперше встановлюєте Nginx, усі «демо» файли веб-сайту будуть у /usr/share/nginx/html
. Це добре, якщо ви розміщуєте лише один сайт, але ми станемо цікавішими. Наразі проігноруйте каталог html
і просто перейдіть до його батьківської папки:
cd /usr/share/nginx
Тестовими доменами для цього підручника будуть site1.server.test
і site2.server.test
, і ми збираємося назвати папки веб-сайтів відповідно. Ви, звичайно, повинні змінити ці домени на ті, які використовуєте. Однак (і ось трюк, який я взяв від Smarter PeopleTM), ми будемо писати доменні імена «задом наперед».
напр. "yourwebsite.com" буде розміщено в папці під назвою com.yourwebsite
. Майте на увазі, що ви можете буквально назвати ці папки як завгодно, але для цього методу є вагома причина, яку я описав нижче.
Наразі просто створіть свої папки:
mkdir -p test.server.site1/html
mkdir -p test.server.site2/html
Отже, ця команда створить, наприклад, папку test.server.site1
і помістить у неї іншу папку під назвою html
. Саме там ви розмістите файли, які хочете обслуговувати через веб-сервер. (Ви також можете назвати це "webroot" або щось подібне.)
Це робиться для того, щоб ви могли розміщувати пов’язані з веб-сайтами файли, які ви не хочете оприлюднювати, у батьківському каталозі, зберігаючи все в одному місці.
Примітка
Прапорець -p
повідомляє команді mkdir
про створення будь-яких відсутніх папок у щойно визначеному шляху, тому вам не потрібно створювати кожну папку по одній.
Для цього тесту ми робимо самі «веб-сайти» дуже простими. Просто створіть файл HTML у першій папці за допомогою вашого улюбленого текстового редактора:
nano test.server.site1/html/index.html
Потім вставте наступний фрагмент HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Site 1</title>
</head>
<body>
<h1>This is Site 1</h1>
</body>
</html>
Збережіть і закрийте файл, а потім повторіть кроки з папкою test.server.site2
, змінивши «Сайт 1» на «Сайт 2» у HTML-коді вище. Це робиться для того, щоб пізніше ми могли бути впевнені, що все працює належним чином.
Ваші тестові веб-сайти готові; їдемо далі.
Папки конфігурації¶
Тепер перейдемо до папки налаштувань і конфігурації Nginx, де ми будемо працювати до кінця цього посібника:
cd /etc/nginx/
Якщо ви запустите команду ls
, щоб побачити, які тут файли та папки, ви побачите багато різних речей, більшість із яких сьогодні неактуальні. Слід звернути увагу на такі:
nginx.conf
— це файл, який містить стандартну конфігурацію Nginx. Ми відредагуємо це пізніше.conf.d
— це каталог, куди ви можете розміщувати власні конфігураційні файли. Ви можете використовувати це для веб-сайтів, але краще використовувати його для налаштувань окремих функцій, які ви хочете використовувати на всіх своїх веб-сайтах.default.d
– це каталог, куди може перейти конфігурація вашого веб-сайту, якщо на сервері працює лише один сайт або якщо ваш сервер має " первинний" веб-сайт. Залиште це поки що.
Ми хочемо створити дві нові папки під назвою sites-available
та sites-enabled
:
mkdir sites-available
mkdir sites-enabled
Ми розмістимо всі конфігураційні файли нашого веб-сайту в папці sites-available
. Ви можете працювати над конфігураційними файлами там скільки завгодно, поки не будете готові активувати файли за допомогою символічного посилання на папку sites-enabled
.
Нижче я покажу вам, як це працює. Наразі ми закінчили із папками.
Чому ви (можете) захотіти записати свої домени в зворотному порядку:
Простіше кажучи, це організаційна річ, яка особливо корисна під час використання командного рядка із завершенням табуляції, але вона все ще є досить цінною для програм на основі графічного інтерфейсу користувача. Він розроблений для людей, які запускають багато веб-сайтів або програм на сервері.
Усі папки вашого веб-сайту (і файли конфігурації) будуть упорядковані в алфавітному порядку спочатку за доменом верхнього рівня (наприклад, .com, .org тощо), потім за основним доменом, а потім за будь-якими субдоменами. Під час пошуку в довгому списку доменів може бути легше звузити те, що ви шукаєте.
Це також полегшує сортування ваших папок і конфігураційних файлів за допомогою інструментів командного рядка. Щоб отримати список усіх папок, пов’язаних із певним доменом, ви можете виконати:
ls /usr/share/nginx/ | grep com.yoursite*
Що виведе щось на зразок:
com.yoursite.site1
com.yoursite.site2
com.yoursite.site3
Налаштування файлів конфігурації¶
Редагування nginx.conf¶
За замовчуванням реалізація Nginx у Rocky Linux відкрита для всього HTTP-трафіку та спрямовує його на демонстраційну сторінку, яку ви могли бачити в нашому посібнику зі встановлення Nginx. Ми цього не хочемо. Ми хочемо, щоб трафік із доменів спрямовувався на вказані нами веб-сайти.
Тож із каталогу /etc/nginx/
відкрийте nginx.conf
у вашому улюбленому текстовому редакторі:
nano nginx.conf
Спочатку знайдіть рядок, який виглядає так:
include /etc/nginx/conf.d/*.conf;
І додайте цей біт трохи нижче:
include /etc/nginx/sites-enabled/*.conf;
Це буде завантажено у файли конфігурації нашого веб-сайту, коли вони будуть готові до запуску.
Тепер перейдіть до розділу, який виглядає так, і або закоментуйте його за допомогою символу решітки ++#++, або видаліть його, якщо вам так хочеться:
server {
listen 80;
listen [::]:80;
server_name _;
root /usr/share/nginx/www/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
Як це виглядало б як «закоментовано»:
#server {
# listen 80;
# listen [::]:80;
# server_name _;
# root /usr/share/nginx/www/html;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# error_page 404 /404.html;
# location = /404.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
#}
Якщо ви новачок, ви можете зберегти код із коментарями для довідки, що стосується прикладу коду HTTPS, який уже прокоментовано нижче у файлі.
Збережіть і закрийте файл, а потім перезапустіть сервер за допомогою:
systemctl restart nginx
Тепер принаймні демонстраційну сторінку ніхто не побачить.
Додавання файлів конфігурації сайту¶
Тепер давайте зробимо ваші тестові веб-сайти доступними на сервері. Як зазначалося раніше, ми зробимо це за допомогою символічних посилань, щоб швидко вмикати та вимикати веб-сайти за бажанням.
Примітка
Для абсолютних новачків символічні посилання — це спосіб дозволити файлам удавати, що вони знаходяться у двох папках одночасно. Змініть вихідний файл (або «ціль»), і він зміниться всюди, де ви на нього посилаєтеся. Оригінал буде змінено, якщо ви використовуєте програму для редагування файлу за посиланням.
Однак нічого не станеться з оригінальним файлом, якщо ви видалите посилання на ціль. Цей трюк дозволяє нам помістити файли конфігурації веб-сайту в робочий каталог (sites-available
), а потім «активувати» їх, посилаючись на ці файли з sites-enabled
.
Я покажу вам, що я маю на увазі. Створіть файл конфігурації для першого веб-сайту так:
nano sites-available/test.server.site1.conf
Тепер вставте цей код. Це найпростіша робоча конфігурація Nginx, яку ви можете мати, і вона повинна добре працювати на більшості веб-сайтів зі статичним HTML:
server {
listen 80;
listen [::]:80;
# virtual server name i.e. domain name #
server_name site1.server.test;
# document root #
root /usr/share/nginx/test.server.site1/html;
# log files
access_log /var/log/nginx/www_access.log;
error_log /var/log/nginx/www_error.log;
# Directives to send expires headers and turn off 404 error logging. #
location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
access_log off; log_not_found off; expires max;
}
}
Все, починаючи з кореня документа і нижче, є технічно необов’язковим. Корисно та рекомендовано, але не обов’язково для функціонування веб-сайту.
У будь-якому разі збережіть і закрийте файл, а потім перейдіть до каталогу sites-enabled
:
cd sites-enabled
Створіть символічне посилання на щойно створений файл конфігурації в папці sites-available
:
ln -s ../sites-available/test.server.site1.conf
Перевірте свою конфігурацію за допомогою команди nginx -t
, і якщо ви отримаєте повідомлення про те, що все гаразд, перезавантажте сервер:
systemctl restart nginx
Потім наведіть свій браузер на домен, який ви використовуєте для цього першого сайту (у моєму випадку: site1.server.test), і знайдіть повідомлення «Це сайт 1», яке ми розмістили у файлі HTML. Якщо у вашій системі встановлено curl
, ви можете запустити curl site1.server.test
і перевірити, чи завантажується HTML-код у вашому терміналі.
Примітка
Деякі браузери (з найкращими намірами) змушують вас використовувати HTTPS, коли ви вводите домен свого сервера в адресний рядок. Якщо у вас не налаштовано HTTPS, це викличе помилки.
Не забудьте вручну вказати "http://" в адресному рядку браузера, щоб уникнути цієї проблеми. Якщо це не спрацює, очистіть кеш або використовуйте менш вимогливий браузер для цієї частини тестування. Я рекомендую Min.
Якщо все піде правильно, повторіть кроки вище, змінивши назви файлів і вміст файлів конфігурації. "site1" до "site2" і все це. Коли у вас є файли конфігурації та символічні посилання для сайту 1 і сайту 2, і ви перезапустили Nginx, це має виглядати так:
Примітка
Ви також можете створювати посилання за межами каталогу з підтримкою сайтів за допомогою довгої форми команди ln -s
. Це виглядатиме як ln -s [source-file] [link]
.
У цьому контексті це:
ln -s /etc/nginx/sites-available/test.server.site1.conf /etc/nginx/sites-enabled/test.server.site1.conf
Відключення веб-сайту¶
Якщо вам потрібно зупинити роботу одного зі своїх веб-сайтів, перш ніж знову запустити його, просто видаліть символічне посилання в розділі «Увімкнено сайти»:
rm /etc/nginx/sites-enabled/test.server.site1.conf
Потім перезапустіть Nginx. Щоб відновити роботу сайту, вам потрібно буде повторно створити символічне посилання та перезапустити Nginx.
Опціонально: редагування файлу хостів¶
Ця частина однозначно для новачків. Усі інші, ймовірно, можуть пропустити.
Цей розділ тільки застосовується, якщо ви пробуєте цей посібник у локальному середовищі розробки. Це якщо ви запускаєте свій тестовий сервер на своїй робочій станції або іншому комп’ютері у вашій локальній домашній чи корпоративній мережі.
Оскільки вказати зовнішні домени на ваші локальні комп’ютери – це складно (і потенційно небезпечно, якщо ви не знаєте, що робите), ви можете налаштувати кілька «підроблених» доменів, які добре працюватимуть у вашій локальній мережі й ніде більше.
Найпростіший спосіб зробити це за допомогою хост-файлу на вашому комп’ютері. Файл хосту – це лише текстовий файл, який може замінити налаштування DNS. Ви можете вручну вказати доменне ім’я для будь-якої IP-адреси. Однак він працюватиме лише на цьому одному комп’ютері.
Отже, на Mac і Linux файл host знаходиться в каталозі /etc/
і його можна дуже легко редагувати за допомогою командного рядка (вам знадобиться root-доступ). Якщо ви працюєте на робочій станції Rocky Linux, просто запустіть:
nano /etc/hosts
У Windows файл hosts знаходиться за адресою C:\Windows\system32\drivers\etc\hosts
, і ви можете використовувати будь-який графічний текстовий редактор, якщо у вас є права адміністратора.
Отже, якщо ви працюєте на комп’ютері Rocky Linux і використовуєте сервер Nginx на тому самому комп’ютері, ви повинні відкрити файл і визначити потрібні домени/IP-адреси. Якщо ваша робоча станція та тестовий сервер використовуються на одній машині, це буде:
127.0.0.1 site1.server.test
127.0.0.1 site2.server.test
Якщо ви використовуєте сервер Nginx на іншій машині в мережі, просто використовуйте адресу цієї машини, наприклад.:
192.168.0.45 site1.server.test
192.168.0.45 site2.server.test
Потім ви можете вказати свій браузер на ті домени, які мають працювати належним чином.
Налаштування SSL-сертифікатів для ваших сайтів¶
Перегляньте наш посібник із отримання сертифікатів SSL за допомогою Let's Encrypt і certbot. Інструкції там працюватимуть чудово.
Висновок¶
Пам’ятайте, що більшість угод про організацію папок/файлів і іменування є технічно необов’язковими. Конфігураційні файли вашого веб-сайту здебільшого мають зберігатися всередині /etc/nginx/
, а nginx.conf
має знати, де знаходяться ці файли.
Фактичні файли веб-сайту мають бути десь у /usr/share/nginx/
.
Спробуйте, попрацюйте з ScienceTM і не забудьте запустити nginx -t
перед перезапуском Nginx, щоб переконатися, що ви не пропустили крапку з комою або що завгодно. Це заощадить вам багато часу.
Author: Ezequiel Bruni
Contributors: Steven Spencer, Ganna Zhyrnova