nginx - nginx: [emerg] bind () to [::]: 80 failed (98: Adres już używany)

249

Nagle pojawia się błąd nginx poniżej

 * Restarting nginx
 * Stopping nginx nginx
   ...done.
 * Starting nginx nginx
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
   ...done.
   ...done.

Jeśli ucieknę

lsof -i :80 or sudo fuser -k 80/tcp 

Nic nie dostaję Nic na porcie 80

Następnie uruchamiam poniżej:

sudo netstat -pan | grep ":80"
tcp        0      0 127.0.0.1:8070          0.0.0.0:*               LISTEN      15056/uwsgi     
tcp        0      0 10.170.35.97:39567      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39564      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39584      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39566      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39571      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39580      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39562      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39582      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39586      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39575      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39579      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39560      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39587      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39591      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39589      10.158.58.13:8080       TIME_WAIT   - 

Jestem zakłopotany. Jak to debugować?

Używam uwsgi z przepustką proxy na porcie 8070. uwsgi jest uruchomiony. Nginx nie jest. Używam Ubuntu 12.4

Poniżej znajdują się odpowiednie części mojego pliku conf nginx

upstream uwsgi_frontend {
          server 127.0.0.1:8070;
        }
server {
listen 80;
        server_name 127.0.0.1;
        location = /favicon.ico {
                  log_not_found off;
                }



                location / {
                       include uwsgi_params;
                       uwsgi_buffering off;

                       uwsgi_pass 127.0.0.1:8070;
                 }
        }

Oto jak instaluję nginx na Ubuntu 12.04

nginx=stable;add-apt-repository ppa:nginx/$nginx;
apt-get update
apt get install nginx-full
Tampa
źródło
19
Znalazłem problem, którego nigdy wcześniej nie miałem. Musiałem usunąć / etc / nginx / sites-available / default. Potem zadziałało. Moje conf było w / etc / nginx / default
Tampa
Uruchomiłem Nginx + Varnish i miałem ten błąd. Rozwiązanie było zarówno na początku, jak i na początku, a następnie najpierw uruchom Nginx, a następnie lakier.
Ben,
możesz spróbować zatrzymać usługę nazwaną.
amal
czy usunąłeś swoje domyślne z włączonych witryn?
Wolfpack'08
wypróbowałem wszystkie rozwiązania tutaj. Sprawdziłem wszystkie używane porty (był używany przez samą NGINX), więc zabiłem port i uruchomiłem go ponownie. Działa jak urok.
gavin

Odpowiedzi:

202

[::]:80 to adres IPv6.

Ten błąd może być spowodowany, jeśli masz konfigurację nginx, która nasłuchuje na porcie 80, a także na porcie [::]:80 .

W moim domyślnym pliku dostępnym na stronie miałem następujące elementy:

listen 80;
listen [::]:80 default_server;

Możesz to naprawić, dodając ipv6only=ondo [::]:80tego:

listen 80;
listen [::]:80 ipv6only=on default_server;

Aby uzyskać więcej informacji, zobacz:

http://forum.linode.com/viewtopic.php?t=8580

http://wiki.nginx.org/HttpCoreModule#listen

Nathan
źródło
11
Możesz to również naprawić, usuwając Listen 80; ponieważ posłuchaj [::]: 80 list zarówno IPv4, jak i IPv6. Uważaj jednak, ponieważ niektóre systemy (takie jak FreeBSD) oddzielają gniazda IPv4 i IPv6, a wtedy nie będzie działać, ale w przypadku systemu Linux powinno być w porządku. wiki.nginx.org/HttpCoreModule#listen
gitaarik
4
Dziękujemy za zapoznanie się z tym i wyjaśnienie, dlaczego usunięcie /etc/nginx/sites-available/defaultpomaga w przypadku powyższego błędu.
Oliver,
1
Nawet gdy komentuję linię ipv6, nadal próbuję uzyskać ten sam błąd sudo service nginx restart. Kiedy to robię netstat -tulpn |grep 80, otrzymuję tylko raz proces nginx (0.0.0.0:80). Wszelkie pomysły, dlaczego się nie uruchomi ponownie?
Rzymian
Popieram to, co powiedział @rednaw, ale zamiast usunąć słuchanie, możesz po prostu to skomentować
d4nyll
Ustawienie ipv6only=onnaprawiło problem, ale nginx powinien naprawdę wykryć, że próbuje się połączyć z tym samym interfejsem: port dwa razy.
Dan Dascalescu,
246

Naprawiłem to przez uruchomienie sudo apachectl stop- okazało się, że apache działał w tle i uniemożliwiłem uruchamianie nginx na pożądanym porcie.

W trybie Ubuntu sudo /etc/init.d/apache2 stop

lfender6445
źródło
8
Służy sudo /etc/init.d/apache2 stopdo zatrzymywania apache na Ubuntu 14.04
Footniko
3
Powodem jest to, że nie można mieć dwóch serwerów sieciowych nasłuchujących na tym samym porcie. Wybierz jeden iw razie potrzeby serwer proxy. Np. Użyj nginx, ale dla niektórych żądań (takich jak phppliki), proxy do portu Apache.
d4nyll
To samo dotyczy świeżej instalacji Debiana 9.
jirarium
Dzięki. Ale jakiś pomysł, dlaczego to się nagle zaczęło? Nie dotknąłem serwera przez tydzień, ale zaczął się wczoraj.
Ajay Singh
1
Dziękuję za twoje rozwiązanie. Działa dla mnie, korzystam z Google Cloud Platform
konfiguracja
93

Moja sprawa jest inna, musiałem zabić działający Nginx, aby go ponownie uruchomić.

Zamiast

sudo systemctl restart nginx

Musiałem użyć:

sudo pkill -f nginx & wait $!
sudo systemctl start nginx
datdinhquoc
źródło
1
Brałem 404 Not Found i skorzystałem z twojej sugestii, teraz naprawiłem swój problem. Dzięki.
Zatoka
3
To zadziałało dla mnie. Nic innego nie zrobiło. Nie jestem pewien, jaki proces rozpocznie się po ponownym uruchomieniu systemu, ale po prostu dodam to do mojej procedury restartu nginx. Dzięki!
Khom Nazid
38

Znalazłem problem, którego nigdy wcześniej nie miałem.

Musiałem tylko usunąć /etc/nginx/sites-available/default . Potem zadziałało.

Moje conf było w środku /etc/nginx/default.

Tampa
źródło
2
+1 To rozwiązanie działało dla mnie, ale potem pomyślałem, że musi być coś domyślnego, co faktycznie powoduje problem, więc kopnąłem trochę głębiej i podałem odpowiedź z większą ilością informacji.
Nathan
11
Twierdziłbym, że usunięcie domyślnego szablonu konfiguracji witryny nie jest najlepszym rozwiązaniem - komentowanie wiersza zawierającego listen 80;ten sam szablon już rozwiązuje problem i poprawnie. Twoja sztuczka działa, ale nie tak postąpiłabym w przyszłości dla czytelników twojego pytania. Dlatego proponuję wybrać odpowiedź @ Nathan jako prawidłową.
Oliver,
4
Miałem ten sam problem po uruchomieniu apt-get dist-upgrade, który zaktualizował pakiet nginx, który utworzył link /etc/nginx/sites-enableddo /etc/nginx/sites-available/default. nginx próbował załadować tę domyślną konfigurację, która nasłuchuje na porcie 80 przez IPv6, a następnie ładował moją przeczytaną moją prawdziwą konfigurację. Usunięcie tego dowiązania symbolicznego rozwiązało problem.
Dan Dascalescu
15
NIE POTRZEBUJESZ USUNĄĆ /etc/nginx/sites-available/default , po prostu usuń symboliczny link do niego -sudo rm /etc/nginx/sites-enabled/default
d4nyll
Wystąpił ten problem podczas próby uruchomienia nginxna porcie 8080 i varnish80 oraz podobnej do tej odpowiedzi. Znalazłem problem z nginxdomyślną konfiguracją, która wciąż nasłuchuje na porcie 80, mimo że sites-availablewszystkie moje konfiguracje nasłuchiwały na porcie 8080. To było zlokalizowane na/etc/nginx/conf.d/default
zigojacko
24

Otrzymałem również ten sam błąd.

nginx: [emerg] bind () to [::]: 80 failed (98: Adres już używany)

a kiedy wpisałem localhost w przeglądarce, zaczynałem otrzymywać

To działa!

To jest domyślna strona internetowa dla tego serwera.

Oprogramowanie serwera WWW działa, ale nie dodano jeszcze żadnych treści. zamiast strony powitalnej nginx, apache2 działa na tym samym porcie,

  1. znajdź plik apache2 ports.conf

    sudo /etc/apache2/ports.conf
    
  2. zmień port inny niż 80, robię to jako70

  3. Zapisz plik

  4. uruchom ponownie system

zadziała również dla Ciebie, jeśli wpiszesz localhost w przeglądarce, otrzymasz stronę powitalną nginx

SAURABH
źródło
1
Możesz po prostu nie chcieć uruchamiać jednocześnie Apache2 i nginx. Odkryłem, że instalacja Apache uruchamia usługę. Wydałem więc „sudo /etc/init.d/apache2 stop”, a potem mogłem normalnie uruchomić Nginx. Oszczędza to również przed ponownym uruchomieniem systemu.
Chris Westin,
1
Masz rację, że usunięcie linku / etc / nginx / sites-enabled / default sym uniemożliwia mu nasłuchiwanie na dwóch portach. Uważam, że to trochę denerwujące, że każdy samouczek na temat Nginx zaczyna się od zasugerowania, aby wszyscy usunęli link „domyślny”, ale to chyba inny temat.
eschipul
@IgorGanapolsky przełączyć Apache na inny port?
Menasheh
10

spróbuj wykonać to polecenie

sudo fuser -k 443/tcp
service nginx restart
Jacek
źródło
8

Mój problem polegał na tym, że miałem nakładające się instrukcje słuchania. Udało mi się znaleźć nakładające się na siebie dyrektywy, uruchamiając

grep -r listen /etc/nginx/*

Dwa pliki nasłuchiwały na tym samym porcie:

/etc/nginx/conf.d/default.conf:           listen 80;  
/etc/nginx/sites-enabled/default.conf:    listen 80;
czarny
źródło
3
To bardzo fajny sposób na sprawdzenie: grep -r listen /etc/nginx/*dziękuję za udostępnienie!
Newskooler
6

Miałem ten sam problem w letsencrypt (certbot) i nginx,

ref: https://github.com/certbot/certbot/issues/5486

ten błąd nie ma jeszcze rozwiązania

więc zmieniono crona do odnowienia (umieszczenie przeładowania po odnowieniu) (używając sugestii z certbota)

-- in /etc/cron.d/certbot
from
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew 
to
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --pre-hook "service nginx stop" --post-hook "service nginx start"

logi (krótkie):

-- in /var/log/syslog
Jun 10 00:14:25 localhost systemd[1]: Starting Certbot...
Jun 10 00:14:38 localhost certbot[22222]: nginx: [error] open() "/run/nginx.pid$
Jun 10 00:14:41 localhost certbot[22222]: Hook command "nginx" returned error c$
Jun 10 00:14:41 localhost certbot[22222]: Error output from nginx:
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] still could not bind()
Jun 10 00:14:41 localhost systemd[1]: Started Certbot.


-- in /var/log/nginx/error.log
2018/06/10 00:14:27 [notice] 22233#22233: signal process started
2018/06/10 00:14:31 [notice] 22237#22237: signal process started
2018/06/10 00:14:33 [notice] 22240#22240: signal process started
2018/06/10 00:14:34 [notice] 22245#22245: signal process started
2018/06/10 00:14:38 [notice] 22255#22255: signal process started
2018/06/10 00:14:38 [error] 22255#22255: open() "/run/nginx.pid" failed (2: No $
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
2018/06/10 00:14:39 [emerg] 22261#22261: still could not bind()
Wagner Pereira
źródło
1
super losowy, ale to był mój problem. dzięki za opublikowanie tego. mój błąd zdawał się pojawiać z powodu nieaktualnego wpisu domeny, który próbował odnowić, ale nie mógł, ponieważ nie kontrolowałem już domeny.
w--
Chyba to też jest mój problem. ale muszę czekać, żeby
rzucić
2

Najpierw zmień port nasłuchiwania apache 80 na 8080 w pliku /etc/apache2/ports.conf

Listen 1.2.3.4:80 to 1.2.3.4:8080
sudo service apache2 restart 

lub

sudo service httpd restart    // in case of centos

następnie dodaj nginx jako serwer proxy odwrotnego, który będzie nasłuchiwał portu apache

server {
 listen   1.2.3.4:80;
 server_name  some.com;

 access_log  /var/log/nginx/something-access.log;

 location / {
  proxy_pass http://localhost:8080;
  proxy_redirect off;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 }


location ~* ^.+\.(jpg|js|jpeg|png)$ {
   root /usr/share/nginx/html/;
}

location /404.html {
  root /usr/share/nginx/html/40x.html;
}

error_page 404 /404.html;
    location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
    location = /50x.html {
}

# put code for static content like js/css/images/fonts
}

Po zmianach zrestartuj serwer nginx

sudo service nginx restart

Teraz cały ruch będzie obsługiwany przez serwer nginx i wysyła wszystkie żądania dynamiczne do apache, a statyczna kontrola jest obsługiwana przez serwer nginx.

W przypadku zaawansowanej konfiguracji, takiej jak pamięć podręczna:

https://www.linode.com/docs/web-servers/nginx/slightly-more-advanced-configurations-for-nginx/#basic-nginx-caching

Kamal Kumar
źródło
1

Spotkałem podobny problem. dziennik jest jak poniżej

2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: still could not bind()
2018/10/31 12:54:23 [alert] 127997#127997: unlink() "/run/nginx.pid" failed (2: No such file or directory)
2018/10/31 22:40:48 [info] 36948#36948: Using 32768KiB of shared memory for push module in /etc/nginx/nginx.conf:68
2018/10/31 22:50:40 [emerg] 37638#37638: duplicate listen options for [::]:80 in /etc/nginx/sites-enabled/default:18
2018/10/31 22:51:33 [info] 37787#37787: Using 32768KiB of shared memory for push module in /etc/nginx/nginx.conf:68

Ostatni [emerg]pokazuje to, duplicate listen options for [::]:80co oznacza, że ​​zawiera więcej niż jeden plik bloku nginx[::]:80 .

Moim rozwiązaniem jest usunięcie jednego z [::]:80 ustawień

PS prawdopodobnie masz domyślny plik bloku. Radzę zachować ten plik jako domyślny serwer dla portu 80. i usunąć [::]:80z innych plików bloków

Oscar Zhou1989
źródło
1

Używam superwizora, aby uruchamiać Nginx i Gunicorn obok siebie na kontenerze Docker.

To była konfiguracja zastosowana dla superwizora:

[supervisord]
nodaemon=true

[program:gunicorn]
command = /project/start.sh
user = www-data


[program:nginx]
command=/usr/sbin/nginx

Problem polegał na tym, jak uruchomiłem Ngnix: domyślnie działa na pierwszym planie. Powoduje to, że supervise ponownie spróbuje uruchomić inną instancję Nginx.

Dodając -g 'daemon off;'do wiersza poleceń, Nginx pozostał na pierwszym planie, przełożony przestał próbować uruchomić inną instancję.

Sebastien DA ROCHA
źródło
1

W moim przypadku jedna z usług Apache, Apache2 lub Nginx była już uruchomiona i dlatego nie byłem w stanie uruchomić drugiej usługi.

Rishikesh Chandra
źródło
0

Miałem kilka plików * .save (zrzuty alarmowe z nano) z różnych plików konfiguracyjnych NGINX w moim katalogu dostępnym na stronach. Po usunięciu tych plików .save, NGINX zrestartował się dobrze. Założyłem, że są nieszkodliwe, ponieważ nie ma odpowiednich dowiązań symbolicznych, ale chyba się myliłem.

Allen
źródło
0

Aby śledzić odpowiedzi na @ lfender6445 i @SAURABH -

Moim problemem był również fakt, że po aktualizacji do Vagrant 2.2.2 Apache2 działał jako serwer WWW podczas uruchamiania gościa. W przeszłości miałem tylko Nginx jako serwer WWW.

włóczącego się ssh do skrzynki i uruchom następującą komendę, aby wyłączyć uruchamianie Apache2 za każdym razem, gdy uruchamia się okno gościa:

sudo update-rc.d -f apache2 remove

Wyjdź ssh, włóczęgowcze zatrzymanie, włóczęgo w górę. Problem rozwiązany.

Lance Cleveland
źródło
0

Jeśli problem nie ustąpi po wypróbowaniu dowolnego z powyższych rozwiązań, uruchom ponownie serwer raz. To zadziałało dla mnie :)

Deejay
źródło
Tak, to by było. Ale zabicie procesu nginx, a następnie ponowne uruchomienie tylko nginx również działa. To odpowiedź @datdinhquoc.
Khom Nazid
0

W moim przypadku sprawcą okazał się blok serwera zawierający:

        listen  127.0.0.1:80;
        listen  [::1]:80 ipv6only=on;
        server_name  localhost;

W systemie Linux gniazdo nasłuchujące na określonym adresie IP (np. [::1]:80) Powoduje konflikt z gniazdem nasłuchującym na tym samym porcie, ale dowolnym adresem IP (tj [::]:80.). Normalnie nginx w przejrzysty sposób poradzi sobie z tym problemem, używając jednego gniazda za tymi scenami. Jednak wyraźne określenie ipv6only(lub niektórych innych opcji) dyrektywy nasłuchu zmusza nginx do (próby) utworzenia dla niej osobnego gniazda, w wyniku czegoAddress already in use błąd.

Ponieważ i tak ipv6only=onjest domyślną (od 1.3.4) poprawką było po prostu usunięcie tej opcji z tej dyrektywy i upewnienie się, że ipv6onlynie jest używana nigdzie indziej w mojej konfiguracji.

Matthijs
źródło
0

Mam ten sam problem, ale widzę, że port 80 nasłuchiwał Nginx:

tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      9730/nginx 

Ale gdy próbuję go ponownie uruchomić, pojawia się błąd:

    service nginx restart
Stopping nginx:                                            [FAILED]
Starting nginx: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] still could not bind()

Mój problem był w pliku konfiguracyjnym, mam ustawiony plik PID i wydaje się, że system nie może go poprawnie złapać:

user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

Kiedy go usunąłem, zadziałało.

zombi_man
źródło