Ich habe meinen Ubuntu-Server heute Morgen neu gestartet, weil anscheinend ein Speichermangelfehler auftrat (kommt gelegentlich vor, war aber nicht so schlimm, dass ich versucht habe, ihn zu beheben). Aber jetzt ist meine Site (die vorher einwandfrei funktionierte) nicht mehr über den Browser zugänglich.
Das Setup: Ich betreibe eine NuxtJS-Site, die ich mit pm2 als Daemon und mit nginx als Reverse-Proxy ausführe. Ich habe einen Post-Receive-Git-Hook, mit dem ich in mein Remote-Git-Repo pushen kann, das dann die App neu erstellt und die pm2-Instanz neu startet.
Ich kann auf meine Site nur zugreifen vonim Inneren des Servers, in einem Terminalfenster. Lynx, wget und cURL funktionieren alle und folgen sogar der 301-Weiterleitung zu HTTPS. Und sie funktionieren, wenn ich die Domäne selbst anfordere, nicht nur den localhost:3000, der per Reverse-Proxy weitergeleitet wird. Also, funktioniert curl https://my-domain.org
. Wenn ich versuche, curl/lynx/usw. von einem anderen Terminalfenster aus zu verwenden, wartet es einfach, bis die Zeit abläuft. Dasselbe gilt für den Browser – wartet, bis die Zeit abläuft.
Hier sind die Dinge, die ich ausprobiert/angesehen habe:
- Ich verwende UFW und habe deshalb überprüft, ob die Firewall das Problem ist. Aber 80, 443 und 8080 sind alle auf ALLOW eingestellt.
- Ich habe versucht herauszufinden, ob nginx vielleicht nicht zuhört, also habe ich es versucht
sudo lsof -i -P -n | grep LISTEN
. Hier ist die Ausgabe davon:
nginx 2896 root 6u IPv4 668673557 0t0 TCP *:443 (LISTEN)
nginx 2896 root 7u IPv4 668673558 0t0 TCP *:80 (LISTEN)
nginx 2897 www-data 6u IPv4 668673557 0t0 TCP *:443 (LISTEN)
nginx 2897 www-data 7u IPv4 668673558 0t0 TCP *:80 (LISTEN)
nginx 2898 www-data 6u IPv4 668673557 0t0 TCP *:443 (LISTEN)
nginx 2898 www-data 7u IPv4 668673558 0t0 TCP *:80 (LISTEN)
- Ich habe versucht, das access.log von nginx zu überprüfen. Alle meine curl/wget/Lynx-Anfragen werden wie gewohnt angezeigt, aber keine der Browseranfragen. Ich habe mir auch das error.log angesehen und Folgendes erhalten:
2021/07/31 11:51:52 [emerg] 885#885: bind() to 0.0.0.0:443 failed (98: Address already in use)
2021/07/31 11:51:52 [emerg] 885#885: bind() to 0.0.0.0:80 failed (98: Address already in use)
2021/07/31 11:51:52 [emerg] 885#885: bind() to 0.0.0.0:443 failed (98: Address already in use)
2021/07/31 11:51:52 [emerg] 885#885: bind() to 0.0.0.0:80 failed (98: Address already in use)
2021/07/31 11:51:52 [emerg] 885#885: still could not bind()
Bisher habe ich keine Lösung gefunden. Ich bin einfach verblüfft, denn was auch immer sich geändert hat, es hat sich aufgrund eines Neustarts geändert. Ich bin für alle Ideen sehr dankbar.
BEARBEITEN, um einige Ausgaben hinzuzufügen:
sudo systemctl status nginx
:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2021-07-31 15:05:53 EDT; 27min ago
Process: 6834 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status
Process: 6840 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 6837 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 6841 (nginx)
CGroup: /system.slice/nginx.service
├─6841 nginx: master process /usr/sbin/nginx -g daemon on; master_process on
├─6842 nginx: worker process
└─6843 nginx: worker process
Jul 31 15:05:53 parrot systemd[1]: Starting A high performance web server and a reverse proxy server...
Jul 31 15:05:53 parrot systemd[1]: Started A high performance web server and a reverse proxy server.
Die Ausgabe von sudo nginx -T
ist lang, alsoIch habe es auf den Punkt gebracht.
Antwort1
Das ist so dumm, dass ich nicht weiß, warum das ein Problem war, also bin ich für alle Gedanken dazu dankbar. Meine ufw
Einstellungen waren/sind wie folgt:
Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
80 ALLOW Anywhere
8080 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443/tcp (v6) ALLOW Anywhere (v6)
80 (v6) ALLOW Anywhere (v6)
8080 (v6) ALLOW Anywhere (v6)
Da sind ein paar redundante 80er drin, aber ich habe zusätzliches Zeug hinzugefügt, um zu sehen, ob es hilft.
Jemand hat mir empfohlen, ufw zu deaktivieren, nur um sicherzugehen, dass es nicht das Problem war. Offenbar war es das. Ich habe es deaktiviert, die Site funktionierte sofort wieder, und als ich es wieder aktiviert habe, in der Erwartung, dass es wieder kaputt gehen würde, funktionierte es immer noch. Also musste etwas an ufw erneut ausgelöst werden, als ich den Server neu startete.
EDIT: Das liegt vielleicht an iptables-persistent, das auf den meisten Servern automatisch installiert ist, nehme ich an? Sieht so aus, als ob esdas gleiche Problem wie diese SO-Antwort.