Dziś, podczas rutynowej aktualizacji serwerów VPS, zgodnie ze wskazaniami systemu – wykonałałem restart kolejnych serwerów. Wszystkie uruchomiły się prawidłowo, na prawie wszystkich uruchomiły się również wszystkie wymagane usługi. Problem był z jednym serwerem – nie wystartowała usługa webserwera Nginx. Skrypt działający na serwerze i podejmujące proste próby naprawy w takiej sytuacji (głównie restart usług + monit) też nie był w stanie automatycznie uporać się z problemem. Po zalogowaniu się do konsoli po SSH i ręcznej próbie startu usługi otrzymałem komunikat, który już kiedyś widziałem, choć tym razem przyczyna musiała być inna…
Nginx: [emerg] listen() to 0.0.0.0:80, backlog 511 failed (98: Address already in use)
Pierwsza czynność w takim przypadku, która sama się nasuwa, i często jest też najprostszym i najszybszym sposobem na rozwiązanie problemu, to (ponowny) restart systemu/serwera. Tym razem nic to nie dało, błąd pojawiał się nadal, i to, pomimo że sam test konfiguracji Nginx wypadał poprawnie:
Job for nginx.service failed because the control process exited with error code. See „systemctl status nginx.service” and „journalctl -xe” for details.
Wykonanie sugerowanego polecenia (wraz z dodatkowym elementem filtrującym) dawało wyniki w stylu:
patryk@vps01:~$ sudo journalctl -xe | grep "nginx"
nginx: [emerg] listen() to 0.0.0.0:80, backlog 511 failed (98: Address already in use)
Jest to jakaś wskazówka, można by w tym momencie zabrać się do przeglądania konfiguracji Nginx, a konkretnie skonfigurowanych vHostów. Ale z racji tego, że jest to dość ważny serwer (działa na nim choćby strona Webinsider.pl), to w innej lokalizacji mam jego awaryjną kopię, synchronizowaną za pomocą programu Rsync i SSH.
Nie jest to pełna synchronizacja systemu, bo oba serwer VPS działają na innej wirtualizacji, ale podstawowych usług, takich jak np. Nginx, PHP czy MySQL + bazy danych i katalog z plikami stron WWW. Wymuszenie szybkiej synchronizacji, czyli przesłania ustawień na serwer pomocniczy i test, czy tam będzie podobny problem pokazał, że z samą konfiguracją vHostów w Nginx wszystko jest OK. W takim razie problem musiał tkwić gdzieś indziej…
W tym momencie zostaje zabawa w ubijanie procesów, zwalnianie portów itp., ale już kiedyś na innej maszynie to przerabialiśmy ze znajomym, przy okazji weryfikując kolejne poradniki dostępne w internecie, i… tracąc czas. Dlatego moim zdaniem w przypadku takiego błędu najlepiej (i najszybciej) przeinstalować Nginxa, co nie zajmuje nawet 5 minut, a jest duża szansa, że rozwiąże problem. A już na pewnie nie zaszkodzi, jak i sama potencjalna strata czasu nie będzie specjalnie odczuwalna.
Z racji tego, że konfiguracji webserwera byłem pewien (test na zapasowej maszynie), to postanowiłem zachować całą konfigurację Nginx – mam na serwerze dużo różnych stron, do tego miejscami konfiguracja jest dość specyficzna, więc to spora oszczędność czasu i pracy.
Dlatego najpierw kopia istniejącego katalogu z ustawieniami Nginx:
sudo cp -avr /etc/nginx /etc/nginx_old
Następnie odinstalowanie z jednoczesnym kasowaniem ustawień (na wszelki wypadek):
sudo apt-get purge nginx nginx-common
sudo apt-get autoremove
Ponowna instalacja:
sudo apt-get install nginx
Test czy usługa startuje poprawnie (restart):
sudo systemctl restart nginx
Wszystko działa poprawnie, więc można przywrócić stare ustawienia:
sudo rm -rf /etc/nginx
sudo mv /etc/nginx_old /etc/nginx
Po tej operacji jeszcze jeden restart, by sprawdzić, czy wszystko działa i by Nginx mógł zaciągnąć pliki konfiguracyjne. I jak przewidywałem (i testowałem) wszystko wróciło do normy, również po restarcie serwera.
Oczywiście nie zawsze ten sposób pomoże, bo czasem faktycznie problem może być w konfiguracji vHostów (plików konfiguracyjnych), ale wtedy zazwyczaj odpowiedni komunikat wyrzuci procedura testująca konfigurację, z której zawsze warto skorzystać przed restartem Nginxa:
sudo nginx -t
Można też szukać konkretnej przyczyny, ale… jak już pisałem, zazwyczaj zmarnujemy na to więcej czasu i energii, niż na reinstalację webserwera.
- Wakacje składkowe ZUS a zawieszenie działalności gospodarczej, czyli uważaj, bo być może nie będziesz mógł skorzystać (w 2024) - 1970-01-01
- Przykładowy kalkulator wyceny usługi druku 3D, czyli nie tylko materiał się liczy - 1970-01-01
- Home Assistant 2024.10, czyli nowa karta „nagłówek” i niedziałający TTS w ramach usługi Google Cloud - 1970-01-01