В чем дело?
Вы должны использовать 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. Это определено в файле конфигурации. Применяйте основные методы безопасности оттуда; не позволяйте пользователю писать что-либо, к чему веб-сервер не должен писать, не позволяйте другим пользователям писать в файлы, если это не сделано преднамеренно.