Що відбувається?
Ви повинні використовувати 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. Це визначено у конфігураційному файлі. Застосовувати основні практики безпеки; не дозволяйте користувачеві писати те, що веб-серверу не потрібно писати, не дозволяйте іншим користувачам писати у файли, якщо це не навмисно.