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