W czerwcu pisałem o problemie, na jaki trafiłem na jednym z serwerów, którymi zarządzam, a na którym usługa Nginx odmówiła startu (ukochane chyba przez wielu „address already in use”). Wtedy z pomocą przyszedł mi skrypt „zerujący” ustawienia Nginx (pełne odinstalowanie, ponowna instalacja i przywrócenie – po testach – konfiguracji). Tym razem – na innym serwerze – choć błąd wydawał się podobny, to skrypt nie zadziałał, więc musiałem poszukać winowajcy innymi metodami…

Start usługi Nginx blokowany przez Apache2

Skorzystanie ze standardowej komendy journalctl (journalctl -xe) co od razu wskazało, że Nginx nie może wystartować prawidłowo, bo jakieś inne draństwo zdążyło już zając port 80:

patryk@vps01:~$ sudo journalctl -xe | grep "nginx"
nginx: [emerg] listen() to 0.0.0.0:80, backlog 511 failed (98: Address already in use)

I choć większość stron, którymi zarządzam, skonfigurowana jest do działania tylko w wersji szyfrowanej, na porcie 433, to jednak zdarzają się wyjątki, gdzie wersja nieszyfrowana (port 80) musi być dostępna. I to właśnie o ten port się w tym przypadku rozchodzi(ło).

Jeśli w systemie brak polecenia netstat, to w systemie Debian/Ubuntu można je dodać, instalując odpowiednią paczkę:

sudo apt-get install net-tools

Odpaliłem szybki test za pomocą polecenia netstat, w nadziei, że wskaże mi źródło problemu:

sudo netstat -tulpn

I na szczęście tak się stało:

Jak widać w systemie działa webserwer Apache2, który „nasłuchuje” właśnie na porcie 80 (dla IPv6). W sumie to nawet nie wiem, skąd on tam się wziął, bo wiele lat temu zamieniłem Apache2 na Nginx, a do tego ten serwer jest relatywnie świeży… Być może coś się doinstalowało przy okazji któregoś z testów, np. na potrzeby jakiegoś artykułu/poradnika.

W sumie to bez większego znaczenia, wyrok zapadł – ubijamy (proces) Apache2 (PID: 566 – ważne, bo używamy w poleceniu):

sudo kill -2 566

I sprawdzamy, czy Nginx wstanie bez problemu:

sudo service nginx restart

A skoro wszystko działa (co widać też na grafice zamieszczonej powyżej), to pora wywalić Apache2 z systemu (jak pisałem – nie korzystam od lat):

sudo apt-get purge apache2

I tyle. Kilka kontrolnych restartów wykazało, że wszystko działa…

(!) Zgłoś błąd na stronie
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Patryk