Sites-Enabled та Sites-Available: Повний посібник для NGINX та Apache
NGINX та Apache залишаються двома найбільш домінуючими веб-серверами в Інтернеті — і не без причини. Обидва мають багатий досвід використання, високо конфігуровані та здатні обслуговувати складні веб-сайти з високим трафіком з легкістю. Одна з найважливіших концепцій для будь-якого системного адміністратора, який керує сервером на базі Linux, — це розуміння того, як ці веб-сервери обробляють конфігурацію веб-сайтів через структуру каталогів sites-available та sites-enabled.
Незалежно від того, чи ви запускаєте один веб-сайт або керуєте десятками віртуальних хостів на плані VPS Hosting, оволодіння цією моделлю конфігурації дасть вам точний контроль над тим, які сайти активні, які знаходяться на етапі підготовки та як розподіляються ресурси вашого сервера.
Цей посібник надає комплексний, покроковий огляд того, як увімкнути, вимкнути та керувати веб-сайтами за допомогою NGINX та Apache на системах Linux.
Розуміння sites-available та sites-enabled
Як NGINX, так і Apache використовують двокаталогову модель для розділення конфігурації сайту від активації сайту. Цей архітектурний шаблон елегантний у своїй простоті та надзвичайно потужний на практиці.
sites-available
Каталог /etc/nginx/sites-available/ або /etc/apache2/sites-available/ діє як бібліотека всіх можливих конфігурацій сайтів. Кожен веб-сайт, який ви маєте намір розміщувати на сервері, отримує свій власний файл конфігурації, збережений тут. Важливо, що файли в цьому каталозі не активні — вони визначають конфігурацію, але не обслуговують жодного трафіку, поки не будуть явно увімкнені.
sites-enabled
Каталог /etc/nginx/sites-enabled/ або /etc/apache2/sites-enabled/ містить символічні посилання, які вказують на файли конфігурації в sites-available. Лише сайти з активним симлінком у цьому каталозі завантажуються веб-сервером та обслуговуються відвідувачам.
Це розділення пропонує кілька ключових переваг:
- Неруйнівне вимкнення: Ви можете деактивувати сайт без видалення його конфігурації.
- Швидке розгортання: Підготовка нового сайту — це просто створення симлінка.
- Чиста організація: Усі конфігурації існують в одному місці, незалежно від того, активні вони чи ні.
Керування веб-сайтами за допомогою Apache
1. Конфігурація віртуальних хостів Apache
Apache використовує віртуальні хости для обслуговування кількох веб-сайтів з одного екземпляра сервера. Кожен веб-сайт отримує свій власний файл конфігурації, який повідомляє Apache про те, як обробляти вхідні запити для цього домену — включаючи коренева каталог документів, шляхи логування, псевдоніми сервера та інше.
Файли конфігурації для віртуальних хостів Apache зберігаються в:
/etc/apache2/sites-available/#### Створення файлу конфігурації віртуального хоста
Щоб створити файл конфігурації для сайту під назвою test.oo.md, виконайте:
sudo nano /etc/apache2/sites-available/test.oo.md.confВсередині файлу визначте блок віртуального хоста:
<VirtualHost *:80>
ServerAdmin admin@test.oo.md
ServerName your_domain_or_IP
ServerAlias www.test.oo.md
DocumentRoot /var/www/test.oo.md
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>> Примітка: Замініть your_domain_or_IP на вашу фактичну назву домену або IP-адресу сервера. Директива ServerAlias дозволяє Apache відповідати на поддомен www також.
Збережіть та закрийте файл, коли закінчите.
2. Увімкніть сайт за допомогою a2ensite
Після того, як файл конфігурації на місці, активуйте сайт за допомогою команди a2ensite (Apache 2 Enable Site):
sudo a2ensite test.oo.md.confЦя команда автоматично створює символічне посилання з sites-available на sites-enabled:
/etc/apache2/sites-enabled/test.oo.md.conf -> /etc/apache2/sites-available/test.oo.md.confСайт тепер готовий до обслуговування, але зміни не набудуть чинності, поки Apache не буде перезавантажено.
3. Перевірте конфігурацію Apache
Перед перезавантаженням Apache завжди перевіряйте синтаксис вашої конфігурації, щоб виявити будь-які помилки:
sudo apachectl configtestУспішний результат покаже:
Syntax OKЯкщо є помилки, Apache опише проблему та номер рядка — виправте їх перед продовженням.
4. Перезавантажте Apache, щоб застосувати зміни
sudo systemctl reload apache2Використання reload замість restart є кращим у виробничих середовищах, оскільки воно застосовує нову конфігурацію без розривання активних з’єднань.
5. Вимкніть сайт за допомогою a2dissite
Щоб взяти сайт в офлайн без видалення його конфігурації, використовуйте команду a2dissite:
sudo a2dissite test.oo.md.confЦе видаляє символічне посилання з sites-enabled. Файл конфігурації в sites-available залишається недоторканим. Перезавантажте Apache, щоб застосувати:
sudo systemctl reload apache2Керування веб-сайтами за допомогою NGINX
1. Конфігурація блоку сервера NGINX
NGINX використовує блоки сервера — функціональний еквівалент віртуальних хостів Apache. Файли конфігурації блоку сервера зберігаються в:
/etc/nginx/sites-available/#### Створення файлу конфігурації блоку сервера
Щоб створити файл конфігурації для test.oo.md, виконайте:
sudo nano /etc/nginx/sites-available/test.oo.mdВизначте блок сервера всередині файлу:
server {
listen 80;
server_name test.oo.md www.test.oo.md;
root /var/www/test.oo.md;
index index.html index.htm;
access_log /var/log/nginx/test.oo.md_access.log;
error_log /var/log/nginx/test.oo.md_error.log;
location / {
try_files $uri $uri/ =404;
}
}> Пояснення ключових директив:
> – listen 80 — Інструктує NGINX слухати HTTP-трафік на порту 80.
> – server_name — Визначає, на які назви доменів цей блок відповідає.
> – root — Встановлює каталог коренева документів для файлів сайту.
> – try_files — Намагається обслужити запитаний файл або каталог; повертає 404, якщо не знайдено.
2. Увімкніть сайт, створивши символічне посилання
На відміну від Apache, NGINX не надає вбудовану команду на кшталт a2ensite. Замість цього ви вручну створюєте символічне посилання:
sudo ln -s /etc/nginx/sites-available/test.oo.md /etc/nginx/sites-enabled/Це пов’язує файл конфігурації з каталогом sites-enabled, роблячи його придатним для завантаження NGINX.
3. Перевірте конфігурацію NGINX
Завжди перевіряйте конфігурацію NGINX перед перезавантаженням:
sudo nginx -tУспішна перевірка повертає:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulЯкщо повідомляються помилки, перегляньте вказані рядки у вашому файлі конфігурації та виправте їх перед продовженням.
4. Перезавантажте NGINX, щоб застосувати зміни
sudo systemctl reload nginxЯк і з Apache, reload плавно застосовує зміни конфігурації без переривання активних з’єднань — завжди краще за повне restart у живих середовищах.
5. Вимкніть сайт у NGINX
Щоб вимкнути сайт, видаліть його символічне посилання з каталогу sites-enabled:
sudo rm /etc/nginx/sites-enabled/test.oo.mdПотім перезавантажте NGINX, щоб застосувати зміну:
sudo systemctl reload nginxФайл конфігурації в sites-available зберігається та може бути повторно увімкнений у будь-який час.
Швидкий довідник: Керування сайтами Apache та NGINX
| Завдання | Команда Apache | Команда NGINX |
|---|---|---|
| Створити файл конфігурації | nano /etc/apache2/sites-available/site.conf | nano /etc/nginx/sites-available/site |
| Увімкнути сайт | sudo a2ensite site.conf | sudo ln -s /etc/nginx/sites-available/site /etc/nginx/sites-enabled/ |
| Перевірити конфігурацію | sudo apachectl configtest | sudo nginx -t |
| Перезавантажити веб-сервер | sudo systemctl reload apache2 | sudo systemctl reload nginx |
| Вимкнути сайт | sudo a2dissite site.conf | sudo rm /etc/nginx/sites-enabled/site |
Найкращі практики керування сайтами за допомогою NGINX та Apache
1. Один файл конфігурації на сайт
Завжди створюйте спеціальний файл конфігурації для кожного домену або поддомену в каталозі sites-available. Змішування кількох сайтів в один файл створює проблеми з обслуговуванням та значно ускладнює усунення несправностей.
2. Завжди перевіряйте перед перезавантаженням
Зробіть неухильною звичкою запускати apachectl configtest або nginx -t перед кожним перезавантаженням. Помилка синтаксису у файлі конфігурації може вивести з ладу всі сайти на сервері — не лише той, який ви редагуєте.
3. Використовуйте контроль версій для файлів конфігурації
Для серверів, які розміщують кілька сайтів або складні конфігурації, відстежуйте ваші файли конфігурації за допомогою Git:
cd /etc/nginx/sites-available/
git init
git add .
git commit -m "Initial configuration snapshot"Це дає вам повну історію змін та можливість миттєво повернутися до відомого хорошого стану.
4. Завжди примусово використовуйте HTTPS з SSL-сертифікатами
Обслуговування сайтів через простий HTTP більше неприйнятно. Налаштуйте SSL-сертифікати для кожного сайту, яким ви керуєте. Let’s Encrypt надає безкоштовні, автоматично поновлювані сертифікати та безперебійно інтегрується як з Apache (через mod_ssl та Certbot), так і з NGINX.
Після отримання сертифіката оновіть блок сервера або віртуальний хост, щоб слухати на порту 443 та перенаправляти весь HTTP-трафік на HTTPS.
5. Налаштуйте комплексне логування
Завжди визначайте директиви access_log та error_log для кожного сайту. Логи — ваша перша лінія захисту при діагностиці проблем, розслідуванні інцидентів безпеки або аналізі закономірностей трафіку. Зберігайте логи в файлах, специфічних
