Ось твій урок у стилі CS50. Вмикай уяву, ми починаємо! 🚀
🎓 CS50-style: Server Blocks та Virtual Hosts
Вітаю, друзі! 👋
Сьогодні ми не просто вчимо конфігурації. Ми вчимося економити гроші та керувати хаосом. Тема нашого уроку — Server Blocks (у світі Nginx) або Virtual Hosts (у світі Apache).
1. 🔥 Вступ: Проблема однієї розетки
Уявіть ситуацію. Ви — фрилансер. Ви зробили сайт для піцерії вашого друга 🍕. Купили сервер (VPS), запустили сайт. Все чудово. Через тиждень приходить тітка і просить сайт для її в’язального гуртка 🧶.
Риторичне питання: Що ви будете робити? Купувати новий окремий сервер за ще одні $5-10 на місяць? А якщо у вас з'явиться 10 клієнтів? 50?
Це як купувати окремий будинок для кожної картини, яку ви хочете повісити на стіну. Нерозумно, правда?
Проблема: У сервера зазвичай лише одна IP-адреса (наприклад, 192.168.1.50). Як змусити цю одну адресу обслуговувати сотні різних сайтів так, щоб відвідувачі піцерії не потрапили на сайт в'язання?
Ось тут на сцену виходять Server Blocks (Віртуальні хости). Це магія, яка дозволяє одному серверу прикидатися багатьма. Без цієї технології сучасний вебхостинг був би астрономічно дорогим.
2. 🧠 Теоретична база (Як це працює «під капотом»)
Давайте заглянемо під капот.
Коли ви вводите в браузері pizza.com, ваш браузер спочатку знаходить IP-адресу сервера. Припустимо, це 1.2.3.4.
Потім ви вводите knitting.com. IP-адреса та сама — 1.2.3.4.
Як вебсервер (Nginx чи Apache) розуміє, яку папку з файлами вам віддати?
Секрет у заголовках HTTP. Коли ваш браузер стукає у двері сервера, він не просто каже "Привіт, дай сторінку". Він каже (спрощено):
"Привіт! Я прийшов на IP 1.2.3.4, але я шукаю саме Host: pizza.com."
Ключові поняття:
- IP-адреса: Це адреса багатоквартирного будинку 🏢.
- Port (Порт): Це вхідні двері (зазвичай 80 для HTTP або 443 для HTTPS).
- Server Block / Virtual Host: Це консьєрж на вході 👮♂️. Він дивиться, до кого ви прийшли (на який домен), і направляє вас у потрібну квартиру (папку на диску).
Що треба запам’ятати залізобетонно:
- Сервер розрізняє сайти за заголовком
Host. - Virtual Host (Apache) і Server Block (Nginx) — це одне й те саме явище, просто різна термінологія.
- Один сервер може тримати хоч тисячу сайтів, поки йому вистачає оперативної пам'яті та процесора.
3. 🧪 Приклади (Nginx Edition)
Ми будемо використовувати синтаксис Nginx, бо він читається як проза, але логіка однакова всюди.
Приклад 1: Мінімальний робочий блок
Уявіть, що ми налаштовуємо сайт піцерії.
server {
listen 80;
server_name pizza.com www.pizza.com;
root /var/www/pizza;
index index.html;
}
Питання до вас: Що станеться, якщо я відправлю запит на pizza.com?
Правильно, Nginx побачить server_name pizza.com, піде в папку /var/www/pizza і віддасть файл index.html.
Приклад 2: Додаємо сусіда (В'язання)
А тепер на тому ж сервері, в тому ж конфігураційному файлі (або сусідньому), ми додаємо:
server {
listen 80;
server_name knitting.com;
root /var/www/knitting;
index index.html;
}
Магія:
* Запит на pizza.com -> потрапляє в перший блок.
* Запит на knitting.com -> потрапляє в другий блок.
* Порт 80 слухається обома, але конфлікту немає, бо імена різні!
Приклад 3: "Заглушка" (Default Server)
А що, якщо хтось постукає просто по IP-адресі http://1.2.3.4? Яке ім'я він запитує? Ніяке.
server {
listen 80 default_server;
server_name _;
return 404 "Ви помилилися дверима, друже!";
}
Тут default_server означає: "Якщо прийшов запит, який не підходить під жодне інше ім'я — відправляй його сюди". Це як бюро знахідок.
4. 🛠 Практична частина
Час забруднити руки кодом! Уявіть, що ви адміністратор сервера.
🔹 Завдання 1: Створити основу
Напишіть server block для особистого блогу my-blog.local. Файли лежать у /var/www/blog. Він має слухати 80-й порт.
🔹 Завдання 2: "А де картинки?"
Клієнт скаржиться, що коли він заходить на gallery.my-blog.local, він бачить той самий блог.
Завдання: Створіть окремий блок для піддомену gallery, який дивиться в папку /var/www/photos.
🔹 Завдання 3: Виправити помилку
Новачок написав конфіг і сервер не запускається. Знайдіть помилку:
server {
listen 80
server_name test.com
root /var/www/test
}
(Підказка: Nginx дуже любить пунктуацію ;)
🔹 Завдання 4: Реальна задача (Редирект)
Бізнес вимагає, щоб усі, хто заходить на old-site.com, автоматично перелітали на new-site.com.
Міні-кейс: Як використати return 301 ... всередині server block для цього? (Спробуйте нагуглити або здогадатися).
🔹 Завдання 5: Питання «А що, якщо...»
Що станеться, якщо у вас є два блоки з однаковим server_name?
1. Сервер вибухне? 💥
2. Nginx видасть попередження і вибере перший?
3. Вони працюватимуть по черзі?
5. 💡 Мислення як у розробника
Як відрізнити новачка від профі в цій темі?
-
Організація файлів.
- Новачок: Пише всі 50 сайтів в один гігантський файл
nginx.conf. Це пекло для підтримки. - Профі: Використовує структуру папок
sites-available(всі конфіги) таsites-enabled(тільки активні, через символічні посилання). Один сайт = один файл.
- Новачок: Пише всі 50 сайтів в один гігантський файл
-
Принцип "Fail Fast".
- Перед тим як перезавантажувати реальний сервер командою
systemctl restart nginx, профі завжди пишеnginx -t. Ця команда перевіряє синтаксис. Якщо ви зробили помилку в комі,restartпокладе всі сайти на сервері.nginx -tврятує вам життя (і нерви клієнтів).
- Перед тим як перезавантажувати реальний сервер командою
-
Logs (Журнали).
- Хороший тон — налаштувати окремі
access_logтаerror_logдля кожного сайту. Коли сайт піцерії впаде, ви не хочете шукати помилку серед логів в'язального гуртка.
- Хороший тон — налаштувати окремі
6. 🧩 Підсумок
Отже, що ми сьогодні розібрали?
- Server Blocks (Virtual Hosts) дозволяють одній машині обслуговувати безліч доменів.
- Головний диспетчер — це заголовок
Hostу запиті браузера. - Ми навчилися писати базові конфіги та розділяти трафік.
Тепер ви вмієте: ✅ Захостити на своєму ноутбуці або VPS одночасно портфоліо, блог і магазин. ✅ Економити ресурси, не плодячи зайві сервери.
🔜 У наступній серії: Ми налаштували HTTP (80 порт). Але браузери лаються, що це "Небезпечно". У наступному уроці ми підключимо SSL/TLS сертифікати, дізнаємося, що таке "рукостискання" (handshake) і зробимо той самий зелений замочок 🔒 за допомогою Let's Encrypt.
А поки — спробуйте запустити свій перший віртуальний хост. Успіхів! 💻