Ich habe einige Erfahrungen mit Linux, aber keine mit Nginx. Ich wurde beauftragt, die Lastausgleichsoptionen für einen Anwendungsserver zu untersuchen.
Ich habe Apt-Get verwendet, um Nginx zu installieren und alles scheint in Ordnung.
Ich habe ein paar Fragen.
Was ist der Unterschied zwischen dem Ordner sites-available und dem Ordner conf.d? Beide Ordner waren in der Standardkonfiguration für nginx enthalten. Tutorials verwenden beide. Wofür sind sie gedacht und was ist die beste Vorgehensweise?
Wofür wird der für Websites aktivierte Ordner verwendet? Wie benutze ich es?
Die Standardkonfiguration bezieht sich auf einen WWW-Datenbenutzer? Muss ich diesen Benutzer erstellen? Wie erteile ich diesem Benutzer die optimalen Berechtigungen zum Ausführen von nginx?
quelle
www-data
ist ein separates Thema. Die meisten Betriebssysteme definieren einen separaten Benutzer mit niedrigeren Berechtigungen, als den der Prozess nach dem Binden an Port 80 als Root ausgeführt werden kann. Es ist in der Konfigurationsdatei definiert. Wenden Sie von dort aus grundlegende Sicherheitspraktiken an. Lassen Sie den Benutzer nicht auf etwas schreiben, auf das der Webserver nicht schreiben muss. Lassen Sie andere Benutzer nur dann auf die Dateien schreiben, wenn dies beabsichtigt ist.Antworten:
Die sites- * Ordner werden von
nginx_ensite
und verwaltetnginx_dissite
. Für Apache-httpd-Benutzer, die dies mit einer Suche finden, ist das Äquivalenta2ensite
/a2dissite
.In diesem
sites-available
Ordner werden alle Ihre vhost-Konfigurationen gespeichert, unabhängig davon, ob sie derzeit aktiviert sind oder nicht.Der
sites-enabled
Ordner enthält Symlinks zu Dateien im Ordner sites-available. Auf diese Weise können Sie vhosts selektiv deaktivieren, indem Sie den Symlink entfernen.conf.d
erledigt den Job, aber Sie müssen etwas aus dem Ordner verschieben, löschen oder Änderungen daran vornehmen, wenn Sie etwas deaktivieren müssen. Die sites- * Ordner-Abstraktion macht die Dinge etwas organisierter und ermöglicht Ihnen, sie mit separaten Support-Skripten zu verwalten.(es sei denn, Sie sind wie ich und einer von vielen Debian-Administratoren, die die Symlinks direkt verwaltet haben und nichts über die Skripte wissen ...)
quelle
sites-available|sites-enabled
ein Debian-Ismus ist und nicht etwas, was Nginx oder Apache tun. Es war wahrscheinlich in der Vergangenheit recht nützlich, aber in Zeiten des Konfigurationsmanagements und der Container ist seine Nützlichkeit etwas eingeschränkt.nginx.conf
ohne einbußen bei der lesbarkeit berücksichtigt werden kann. Dies steht im Gegensatz zu dem Ansatz vor einigen Jahren, als Server normalerweise Dutzende von Websites speichern würden.Ich möchte zu den vorherigen Antworten hinzufügen, dass das Wichtigste nicht ist, wie Sie die Verzeichnisse aufrufen (obwohl dies eine sehr nützliche Konvention ist), sondern was Sie tatsächlich eingeben
nginx.conf
. Beispielkonfiguration:Die einzige Anweisung, die hier verwendet wird, ist include , daher gibt es keinen internen Unterschied zwischen zB
conf.d/
undsites-enabled/
.Aus der obigen Dokumentation:
Um die ursprüngliche Frage zu beantworten: Es gibt keinen internen Unterschied, und Sie können sie so gut wie möglich verwenden, wobei Sie sich an die Ratschläge der anderen Antworten erinnern. Und bitte vergessen Sie nicht, die "richtige" Antwort zu wählen.
quelle
sites-enabled
wurde durch eine Art Distribution erfunden, die wie ein nerviges Zwischenprodukt herumwirbelt. Holen Sie sich Nginx aus der offiziellen Quelle : Sie erhalten ein aktuelles Produkt und werden diesen Konfigurationsfehler / die Hölle los.In der Regel wird der
sites-enabled
Ordner für virtuelle Hostdefinitionen verwendet, währendconf.d
er für die globale Serverkonfiguration verwendet wird. Wenn Sie mehrere Websites unterstützen - dh virtuelle Hosts -, erhält jede eine eigene Datei, sodass Sie diese ganz einfach aktivieren und deaktivieren können, indem Sie Dateien in und aus verschiebensites-enabled
(oder Symlinks erstellen und entfernen, was wahrscheinlich der Fall ist) eine bessere Idee).Verwenden Sie diese
conf.d
Option zum Laden von Modulen, für Protokolldateien und für andere Dinge, die nicht für einen einzelnen virtuellen Host spezifisch sind.Sie sollten nginx als Benutzer ohne Rootberechtigung ausführen. Dies ist in einigen Fällen benannt
www-data
, aber Sie können es benennen, was Sie wollen.Ich bin mir der Antwort auf diese Frage weniger sicher (ich verwende derzeit kein Nginx), aber wenn es sich um etwas wie Apache handelt, muss der
www-data
Benutzer nur Leseberechtigungen für statische Dateien besitzen (und in Verzeichnissen lesen + ausführen) ) dass Sie Berechtigungen für Dinge wie CGI-Skripte bereitstellen oder lesen / ausführen und sonst nirgends Berechtigungen.quelle
root
und eine Art Remote-Kompromittierung vorliegt, hat der Angreifer sofort vollen Zugriff auf das System. Wenn Sie als nicht privilegierter Benutzer ausgeführt werden, ist der Administratorzugriff nur in Kombination mit einem lokalen Exploit möglich.Was ist los?
Sie müssen Debian oder Ubuntu verwenden, da das Böse
sites-available
/ diesites-enabled
Logik nicht von der Upstream-Paketierung von Nginx von http://nginx.org/packages/ verwendet wird .In beiden Fällen werden beide mit Hilfe der Standard-
include
Direktive in als Konfigurationskonvention implementiert/etc/nginx/nginx.conf
.Hier ist ein Ausschnitt
/etc/nginx/nginx.conf
aus einem offiziellen Upstream-Paket von nginx von nginx.org:Hier ist ein Ausschnitt
/etc/nginx/nginx.conf
aus Debian / Ubuntu :Aus Sicht von NGINX besteht der einzige Unterschied darin, dass Dateien von
conf.d
früher verarbeitet werden. Wenn Sie also Konfigurationen haben, die im Hintergrund miteinander in Konflikt stehen, haben dieseconf.d
möglicherweise Vorrang vor denen insites-enabled
.Best Practice ist
conf.d
.Sie sollten verwenden
/etc/nginx/conf.d
, da dies eine Standardkonvention ist, und sollten überall funktionieren.Wenn Sie eine Site deaktivieren müssen, benennen Sie den Dateinamen einfach so um, dass er kein
.conf
Suffix mehr hat. Dies ist sehr einfach, unkompliziert und fehlerfrei:sudo mv -i /etc/nginx/conf.d/default.conf{,.off}
Oder das Gegenteil, um eine Site zu aktivieren :
sudo mv -i /etc/nginx/conf.d/example.com.conf{.disabled,}
Vermeiden
sites-available
&sites-enabled
um jeden Preis.Ich sehe absolut keinen Grund,
sites-available
/ zu benutzensites-enabled
:Einige Leute haben
nginx_ensite
undnginx_dissite
Skripte erwähnt - die Namen dieser Skripte sind noch schlimmer als der Rest dieses Debakels - aber diese Skripte sind auch nirgends zu finden - sie fehlennginx
sogar in Debian (und wahrscheinlich auch in Ubuntu) im Paket , und auch nicht in einem eigenen Paket vorhanden. Benötigen Sie wirklich ein nicht standardmäßiges Drittanbieter-Skript, um die Dateien einfach zwischen den beiden Verzeichnissen zu verschieben und / oder zu verknüpfen ?!Und wenn Sie die Skripte nicht verwenden (was in der Tat eine gute Wahl ist, wie oben beschrieben), stellt sich die Frage, wie Sie die Websites verwalten:
sites-available
bissites-enabled
?sites-enabled
?Das oben Genannte scheint ein paar kleinere Probleme anzugehen, bis einige Leute anfangen, das System zu verwalten, oder bis Sie eine schnelle Entscheidung treffen, nur um es Monate oder Jahre später zu vergessen ...
Welches bringt uns zu:
Ist es sicher, eine Datei von zu entfernen
sites-enabled
? Ist es eine weiche Verbindung? Eine harte Verbindung? Oder die einzige Kopie der Konfiguration? Ein Paradebeispiel für die Hölle der Konfiguration.Welche Websites wurden deaktiviert? (Führen Sie
conf.d
mit nur eine Inversionssuche nach Dateien durch, die nicht mit.conf
- endenfind /etc/nginx/conf.d -not -name "*.conf"
, oder verwenden Siegrep -v
.)Nicht nur all das oben Genannte, sondern auch die spezielle
include
Anweisung, die von Debian / Ubuntu verwendet wird -/etc/nginx/sites-enabled/*
- fürsites-enabled
wird im Gegensatz zu für kein Dateinamensuffix angegebenconf.d
./etc/nginx/sites-enabled
und Ihreemacs
Backup - Datei erstellt , wiedefault~
, dann plötzlich, haben Sie beidedefault
unddefault~
als aktive Konfiguration enthalten, die je Richtlinien verwendet wird , kann nicht einmal geben Sie alle Warnungen und führen zu einer längeren Debugging-Sitzung. (Ja, es ist mir passiert; es war während eines Hackathons und ich war total verwirrt darüber, warum meine Konferenz nicht funktioniert hat.)Daher bin ich überzeugt, dass
sites-enabled
das reine Böse ist!quelle
sites-enabled
böse genug hielten !sites-enabled
, und dann eine andere Person entscheidet, sie zu deaktivieren, indem sie sie löscht. Möglicherweise glaubt sie, es handele sich nur um einen Symlink. stackoverflow.com/q/45852224/1122270sites-available
und nicht einverstanden seinsites-enabled
; Es ist wichtig, dass Sie Konfigurationsdateien außerhalb des "Live" -Pickup-Verzeichnisses so vorbereiten können, dass Nginx beim erneuten Laden oder Neustarten keine partiellen Konfigurationsdateien aufnimmt. Es kann auch nützlich sein, Konfigurationsdateien zu behalten, die nicht mehr aktiv sind. Das Erstellen von Symlinks ist keine besonders schwierige Aufgabe, wenn Sie über ausreichend Erfahrung verfügen, um Nginx, IMO, zu verwalten.USR1
, Die wieder öffnen logs, reload nicht Konf.) Ich finde Ihre Symlink „Erfahrung“ Kommentare falsche Richtung - die Frage ist eine Frage der Konsequenz, die wenig mit Erfahrung zu tun hat.