Що відбувається?
Ви повинні використовувати Debian або Ubuntu, оскільки зло sites-available
/ sites-enabled
логіка не використовується упаковкою nginx вгору від http://nginx.org/packages/ .
В обох випадках обидва реалізуються як конфігурація конфігурації за допомогою стандартної include
директиви в /etc/nginx/nginx.conf
.
Ось фрагмент /etc/nginx/nginx.conf
офіційного пакету nginx від nginx.org:
http {
…
include /etc/nginx/conf.d/*.conf;
}
Ось фрагмент /etc/nginx/nginx.conf
від Debian / Ubuntu :
http {
…
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Отже, з точки зору NGINX, єдиною різницею було б те, що файли від conf.d
отримують швидше оброблятися, і, як така, якщо у вас є конфігурації, які мовчки конфліктують між собою, то ті з них conf.d
можуть мати перевагу над тими, хто в sites-enabled
.
Найкраща практика conf.d
.
Ви повинні використовувати /etc/nginx/conf.d
, як це стандартна умова, і вона повинна працювати в будь-якому місці.
Якщо вам потрібно вимкнути сайт, просто перейменуйте ім’я файлу, щоб він більше не мав .conf
суфікса, дуже просто, прямо та зрозуміло:
sudo mv -i /etc/nginx/conf.d/default.conf{,.off}
Або навпаки, щоб увімкнути сайт:
sudo mv -i /etc/nginx/conf.d/example.com.conf{.disabled,}
Уникайте sites-available
та будь-якими sites-enabled
витратами.
Я не бачу абсолютно жодної причини використовувати sites-available
/ sites-enabled
:
Деякі люди згадували nginx_ensite
і nginx_dissite
сценарії - назви цих скриптів ще гірші, ніж у решті цього дебале, - але цих скриптів також ніде не знайти - вони відсутні в nginx
пакеті навіть у Debian (і, мабуть, і в Ubuntu) , а також немає у власному пакеті, плюс, чи справді вам потрібен цілий нестандартний сторонній сценарій, щоб просто перемістити та / або зв’язати файли між двома каталогами ?!
І якщо ви не використовуєте сценарії (що насправді є розумним вибором, як зазначено вище), то виникає питання про те, як керувати сайтами:
- Чи створюєте ви символічні посилання від
sites-available
до sites-enabled
?
- Скопіювати файли?
- Перемістити файли?
- Редагувати файли на місці в
sites-enabled
?
Сказане може здатися деякими незначними проблемами, до яких кілька людей не почнуть керувати системою, або поки ви не приймете швидке рішення, лише забувши про це місяцями чи роками вниз…
Що приводить нас до:
Чи безпечно видалити файл із sites-enabled
? Це м'яке посилання? Тверде посилання? Або єдина копія конфігурації? Прекрасний приклад пекла конфігурації.
Які сайти було відключено? (З цим conf.d
просто проведіть пошук інверсії для файлів, які не закінчуються .conf
- find /etc/nginx/conf.d -not -name "*.conf"
або використовують grep -v
.)
Не тільки все вищезазначене, але також відзначаємо специфічну include
директиву, яку використовує Debian / Ubuntu - /etc/nginx/sites-enabled/*
- не вказаний суфікс імені файлу для sites-enabled
, на відміну від conf.d
.
- Це означає, що якщо одного дня ви вирішите швидко відредагувати файл або два в межах
/etc/nginx/sites-enabled
, і ви emacs
створюєте файл резервної копії на кшталт default~
, то, раптом, у вас є обидва default
та default~
включені як активна конфігурація, яка, залежно від використовуваних директив, може навіть не дати ви маєте будь-які попередження та спричиняєте тривалий сеанс налагодження. (Так, це сталося зі мною; це було під час хакатону, і я був зовсім здивований, чому мій конфіденцій не працює.)
Таким чином, я переконаний, що sites-enabled
це чисте зло!
www-data
- окрема тема. Більшість операційних систем визначають окремого користувача з меншими дозволами, який процес може запускати як після прив'язки до порту 80 як root. Це визначено у конфігураційному файлі. Застосовувати основні практики безпеки; не дозволяйте користувачеві писати те, що веб-серверу не потрібно писати, не дозволяйте іншим користувачам писати у файли, якщо це не навмисно.