Mam pewne doświadczenie w używaniu Linuksa, ale żaden nie używa nginx. Zadanie polegało mi na zbadaniu opcji równoważenia obciążenia dla serwera aplikacji.
Użyłem apt-get, aby zainstalować nginx i wszystko wydaje się w porządku.
Mam kilka pytań.
Jaka jest różnica między folderem dostępnym na stronie a folderem conf.d. Oba te foldery zostały WŁĄCZONE w domyślnej konfiguracji konfiguracji dla nginx. Samouczki wykorzystują oba. Do czego służą i jaka jest najlepsza praktyka?
Do czego służy folder obsługujący witryny? Jak z tego korzystać?
Domyślna konfiguracja odwołuje się do użytkownika danych www? Czy muszę utworzyć tego użytkownika? Jak dać temu użytkownikowi optymalne uprawnienia do uruchamiania nginx?
linux
ubuntu
nginx
web-server
configuration
Seth Spearman
źródło
źródło
www-data
to osobny temat. Większość systemów operacyjnych definiuje osobnego użytkownika z niższymi uprawnieniami, które proces może uruchomić po powiązaniu z portem 80 jako root. Jest zdefiniowany w pliku konfiguracyjnym. Zastosuj stamtąd podstawowe praktyki bezpieczeństwa; nie pozwól użytkownikowi pisać na cokolwiek, na co serwer sieciowy nie powinien pisać, nie pozwól innym użytkownikom pisać do plików, chyba że jest to celowe.Odpowiedzi:
Folderami site- * zarządza
nginx_ensite
inginx_dissite
. Dla użytkowników httpd Apache, którzy znajdą to podczas wyszukiwania, odpowiednikiem jesta2ensite
/a2dissite
.sites-available
Folder jest do przechowywania wszystkich swoich konfiguracjach vhosta, czy oni nie aktualnie włączone.sites-enabled
Folder zawiera dowiązania do plików znajdujących się w folderze sites-available. Umożliwia to selektywne wyłączanie vhostów poprzez usunięcie dowiązania symbolicznego.conf.d
wykonuje zadanie, ale musisz przenieść coś z folderu, usunąć go lub wprowadzić zmiany, gdy musisz coś wyłączyć. Abstrakcja folderów site- * sprawia, że sprawy są nieco bardziej zorganizowane i pozwala zarządzać nimi za pomocą osobnych skryptów wsparcia.(chyba że jesteś taki jak ja i jeden z wielu administratorów Debiana, który właśnie zarządzał dowiązaniami symbolicznymi, nie wiedząc o skryptach ...)
źródło
sites-available|sites-enabled
jest to Debian-ism i nie jest czymś, co robią nginx lub Apache. W przeszłości był prawdopodobnie dość użyteczny, ale jego użyteczność jest nieco ograniczona w erze zarządzania konfiguracją i kontenerami.nginx.conf
bez utraty czytelności. Jest to sprzeczne z podejściem sprzed kilku lat, gdy serwery zwykle przechowują dziesiątki stron internetowych.Chciałbym dodać do poprzednich odpowiedzi, że najważniejsze nie jest to, jak wywołujesz katalogi (choć jest to bardzo przydatna konwencja), ale to, co faktycznie umieszczasz
nginx.conf
. Przykładowa konfiguracja:Jedynym dyrektywa użyte tutaj jest to , więc nie ma różnicy między np wewnętrzny
conf.d/
isites-enabled/
.Z powyższej dokumentacji:
Tak więc, aby odpowiedzieć na pierwotne pytanie: nie ma wewnętrznej różnicy i możesz je wykorzystać w najlepszy możliwy sposób, pamiętając porady z innych odpowiedzi. I proszę, nie zapomnij wybrać „właściwej” odpowiedzi.
źródło
sites-enabled
został w jakiś sposób wymyślony przez jakąś dystrybucję, poruszając się, jak irytujący pośrednik. Idź złap nginx z oficjalnego źródła : dostaniesz aktualny produkt, a także pozbędziesz się tej konfiguracji badziewia / piekła.Zazwyczaj
sites-enabled
folder jest używany do definicji hosta wirtualnego, podczas gdyconf.d
służy do globalnej konfiguracji serwera. Jeśli wspierasz wiele stron internetowych - tj. Wirtualnych hostów - wtedy każdy z nich otrzymuje własny plik, dzięki czemu możesz je bardzo łatwo włączać i wyłączać, przenosząc pliki do iz nichsites-enabled
(lub tworząc i usuwając dowiązania symboliczne, co prawdopodobnie lepszy pomysł).Użyj
conf.d
do takich rzeczy jak ładowanie modułów, pliki dziennika i inne rzeczy, które nie są specyficzne dla pojedynczego wirtualnego hosta.Powinieneś mieć nginx działający jako użytkownik inny niż root. W niektórych przypadkach jest to nazywane
www-data
, ale możesz nazwać to, co chcesz.Nie jestem pewien odpowiedzi na to pytanie (w tej chwili nie korzystam z Nginx), ale jeśli jest coś takiego jak Apache, odpowiedź jest taka, że
www-data
użytkownik potrzebuje tylko uprawnień do odczytu do dowolnych plików statycznych (i read + wykonaj w katalogach ), które podajesz lub odczytujesz / wykonujesz uprawnienia do takich rzeczy jak skrypty CGI i żadnych innych uprawnień.źródło
root
i istnieje jakiś zdalny kompromis, osoba atakująca ma natychmiast pełny dostęp do systemu. Podczas działania jako nieuprzywilejowany użytkownik dostęp administracyjny byłby dostępny tylko w połączeniu z jakimś rodzajem lokalnego exploita.Co się dzieje?
Musisz używać Debiana lub Ubuntu, ponieważ zło
sites-available
/sites-enabled
logika nie jest używana przez upstream pakietu nginx ze strony http://nginx.org/packages/ .W obu przypadkach oba są implementowane jako konwencja konfiguracji za pomocą standardowej
include
dyrektywy w/etc/nginx/nginx.conf
.Oto fragment
/etc/nginx/nginx.conf
oficjalnego pakietu nginx z witryny nginx.org:Oto fragment
/etc/nginx/nginx.conf
z Debian / Ubuntu :Tak więc, z punktu widzenia NGINX, jedyną różnicą byłoby to, że pliki
conf.d
będą przetwarzane wcześniej, i jako takie, jeśli masz konfiguracje, które dyskretnie ze sobą konfliktują, wtedy te zconf.d
mogą mieć pierwszeństwo przed tymi wsites-enabled
.Najlepszą praktyką jest
conf.d
.Powinieneś używać
/etc/nginx/conf.d
, ponieważ jest to standardowa konwencja i powinna działać wszędzie.Jeśli chcesz wyłączyć witrynę, po prostu zmień nazwę pliku, aby nie mieć już
.conf
sufiksu, jest to bardzo łatwe, proste i odporne na błędy:sudo mv -i /etc/nginx/conf.d/default.conf{,.off}
Lub odwrotnie, aby włączyć witrynę:
sudo mv -i /etc/nginx/conf.d/example.com.conf{.disabled,}
Unikaj
sites-available
i zasites-enabled
wszelką cenę.Nie widzę absolutnie żadnego powodu, aby używać
sites-available
/sites-enabled
:Niektórzy wspominali
nginx_ensite
inginx_dissite
skrypty - nazwy tych skryptów są jeszcze gorsze niż reszta tego niepowodzenia - ale skrypty te również nie można znaleźć - nie ma ich wnginx
pakiecie nawet w Debianie (i prawdopodobnie również w Ubuntu) , a także nieobecne we własnym pakiecie, czy naprawdę potrzebujesz całego niestandardowego skryptu innej firmy, aby po prostu przenieść i / lub połączyć pliki między dwoma katalogami ?!A jeśli nie korzystasz ze skryptów (co jest tak naprawdę dobrym wyborem, jak opisano powyżej), pojawia się kwestia zarządzania stronami:
sites-available
dosites-enabled
?sites-enabled
?Powyższe może wydawać się drobnymi problemami do rozwiązania, dopóki kilku ludzi nie zacznie zarządzać systemem lub dopóki nie podejmiesz szybkiej decyzji, ale zapomnisz o tym miesiące lub lata później…
Co prowadzi nas do:
Czy usunięcie pliku jest bezpieczne
sites-enabled
? Czy to miękki link? Twardy link? Czy jedyna kopia konfiguracji? Doskonały przykład piekła konfiguracji.Które strony zostały wyłączone? (Za pomocą
conf.d
po prostu wykonaj wyszukiwanie inwersyjne plików, które nie kończą się na.conf
-find /etc/nginx/conf.d -not -name "*.conf"
lub użyjgrep -v
).Nie tylko wszystkie powyższe, ale także zwróć uwagę na konkretną
include
dyrektywę używaną przez Debian / Ubuntu -/etc/nginx/sites-enabled/*
- nie podano sufiksu nazwy plikusites-enabled
, w przeciwieństwie doconf.d
./etc/nginx/sites-enabled
, iemacs
utworzysz plik kopii zapasowejdefault~
, to znaczy, że nagle masz jednodefault
i drugiedefault~
jako aktywną konfigurację, która w zależności od zastosowanych dyrektyw może nawet nie dać ostrzeżenia i powodują przedłużenie sesji debugowania. (Tak, to mi się przydarzyło; miało to miejsce podczas hackatonu i byłem całkowicie zdziwiony, dlaczego moje conf nie działa).Jestem zatem przekonany, że
sites-enabled
to czyste zło!źródło
sites-enabled
to wystarczająco złe!sites-enabled
, ale inna osoba zdecyduje się je wyłączyć, usuwając go, prawdopodobnie myśląc, że to tylko dowiązanie symboliczne, wymagające kolejnego zrzutu pamięci sterty nginx w celu odzyskania pliku conf: stackoverflow.com/q/45852224/1122270sites-available
isites-enabled
; ważne jest, aby móc przygotować pliki konfiguracyjne poza katalogiem „na żywo”, aby w przypadku ponownego załadowania lub ponownego uruchomienia nginx nie pobierał częściowych plików konfiguracyjnych. Przydatne może być również przechowywanie plików konfiguracyjnych, które nie są już aktywne. Tworzenie dowiązań symbolicznych nie jest szczególnie trudnym zadaniem, jeśli masz wystarczające doświadczenie, aby w pierwszej kolejności zarządzać nginx, IMO.USR1
który ponownie otwiera dzienniki, nie przeładowuje conf.) Uważam, że komentarze „doznania” dowiązania symbolicznego zostały źle skierowane - problem dotyczy spójności, która nie ma wiele wspólnego z doświadczeniem.