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:
http {
…
include /etc/nginx/conf.d/*.conf;
}
Oto fragment /etc/nginx/nginx.conf
z Debian / Ubuntu :
http {
…
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
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 z conf.d
mogą mieć pierwszeństwo przed tymi w sites-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 za sites-enabled
wszelką cenę.
Nie widzę absolutnie żadnego powodu, aby używać sites-available
/ sites-enabled
:
Niektórzy wspominali nginx_ensite
i nginx_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 w nginx
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:
- Czy tworzysz dowiązania symboliczne od
sites-available
do sites-enabled
?
- Skopiować pliki?
- Przenieś pliki?
- Czy edytować pliki na miejscu w
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żyj grep -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 pliku sites-enabled
, w przeciwieństwie do conf.d
.
- Oznacza to, że jeśli któregoś dnia zdecydujesz się szybko edytować plik lub dwa w nim
/etc/nginx/sites-enabled
, i emacs
utworzysz plik kopii zapasowej default~
, to znaczy, że nagle masz jedno default
i drugie default~
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!
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.