Podczas uruchamiania systemu CentOS 7 uruchomienie nginx kończy się niepowodzeniem z następującym błędem:
2014/08/04 17:27:34 [emerg] 790#0: bind() to a.b.c.d:443 failed (99: Cannot assign requested address)
Podejrzewam, że tak się dzieje, ponieważ interfejsy sieciowe nie działają jeszcze przed próbą powiązania z tym adresem IP w celu obsługi vhosta przez SSL.
Domyślam się, że muszę określić usługę network.service jako wymaganie dla usługi nginx.service, ale w ogóle nie mogę znaleźć usługi sieciowej w / etc / systemd /.
Jak mogę skonfigurować zlecenie serwisowe lub zależności w systemd?
Odpowiedzi:
Musisz przynajmniej
After=network.target
w[Unit]
sekcji pliku jednostkowego, aby upewnić się, że sieć działa przed uruchomieniem nginx. Nie mam pojęcia, dlaczego nie ma go w pliku jednostki.Oto kompletny przykład z mojego przydatnego systemu Fedora dostarczonego przez Fedorę:
źródło
Z dziennika błędów wygląda konfiguracja nginx. plik ma dyrektywę Listen z jawnym adresem IP:
Oznacza to, że nginx nie rozpocznie chyba że interfejs jest włączony i ABCD IP został przypisany do interfejsu.
Masz dwie opcje:
Jak opisano w http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/ the network.target wskazuje tylko, że stos zarządzania siecią jest w stanie [...] Czy jakiekolwiek interfejsy sieciowe są już skonfigurowane, gdy zostaną osiągnięte jest niezdefiniowany.
Jeśli chcesz się upewnić, że adres IP jest już przypisany, a interfejs działa, musisz dodać network-online.target do pliku systemowej jednostki nginx.
Twój plik /etc/systemd/system/multi-user.target.wants/nginx.service powinien mieć sieć-online.target w wierszach After = i wymaga =.
źródło
network-online.target
- na wypadek, gdyby ktoś również się zastanawiał: tak, obaRequires=
iAfter=
są konieczne, ponieważRequires=
(prawdopodobnie zaskakujące) nie oznacza uporządkowania między wymaganą jednostką a jednostką wymagającą.