Ich habe gerade einen Ubuntu 12.04-Server und nginx 1.2.7 installiert, default
von sites-enabled entfernt und meine eigene Datei in sites-available
und symlink bei sites-enabled
hinzugefügt. Dann nginx neu gestartet.
Problem: Die Website wird jedoch nicht geladen, wenn Sie zur URL gehen. netstat -nlp | grep nginx
und netstat -nlp | grep 80
liefern beide keine Ergebnisse! lsof -i :80
gibt auch nichts zurück. Eine Dig
von einem anderen Server gibt die korrekte IP-Adresse zurück, daher sollte es kein DNS-Problem sein. Ich konnte mich mit Apache verbinden, den ich jetzt eingestellt habe. nginx-Logs zeigen auch nichts.
Wie soll ich dieses Problem beheben?
/etc/nginx/site-available/mysite.com
server {
listen 80;
server_name www.mysite.com mysite.com *.mysite.com;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
root /var/www/mysite/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args ;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_read_timeout 300;
}
}
Ich hatte das gleiche Problem. Die Lösung bestand darin, dass ich meine Siteconf-Datei nicht korrekt verknüpft hatte. Versuchen Sie, vim /etc/nginx/sites-enabled/mysite.com
— auszuführen - können Sie dazu gelangen? Ich erhielt "Permission Denied".
Wenn nicht ausgeführt:
rm /etc/nginx/sites-enabled/mysite.com
ln -s /etc/nginx/sites-available/mysite.com /etc/nginx/sites-enabled/mysite.com
Wenn Ihre Protokolle zu dem Problem nicht verwendet werden, schließen Sie möglicherweise das sites-enabled Verzeichnis nicht ein. Eine einfache Möglichkeit, um zu erfahren, dass die Site geladen wird, besteht darin, den Pfad des Fehler-/Zugriffsprotokolls in Ihrem Serverblock auf einen eindeutigen Pfad festzulegen, nginx neu zu laden und zu prüfen, ob die Dateien erstellt wurden.
Stellen Sie sicher, dass die folgende include-Direktive im http-Kontext in /etc/nginx/nginx.conf vorhanden ist.
http {
...
include /etc/nginx/sites-enabled/*;
}
Ich bin auf dasselbe Problem gestoßen, ich habe einen Failed to load resource: net::ERR_CONNECTION_REFUSED
-Fehler erhalten, wenn ich über HTTP verbunden bin, aber über HTTPS. Ran netstat -tulpn
und sah, dass Nginx nicht an Port 80 für IPv4 bindet. Alles getan, was hier beschrieben wird. Es stellte sich heraus, dass etwassehrdumm ist:
Vergewissern Sie sich, dass die sites-available
-Datei mit dem default_server
tatsächlich aktiviert ist.
Ich hoffe, das hat einige arme Idioten gerettet.
Sie binden Nginx wahrscheinlich zweimal an Port 80. Ist das deine vollständige Konfigurationsdatei? Haben Sie keine andere Anweisung, Port 80 anzuhören?
Es hat sich als hilfreich erwiesen, das Debuggen von Nginx mit den folgenden Schritten zu behandeln:
1 ... Stellen Sie sicher, dass Nginx ausgeführt wird.
ps aux | grep nginx
2 ... Überprüfen Sie, ob Prozesse bereits an den betreffenden Port gebunden sind.
lsof -n -i:80
3 ... Stellen Sie sicher, dass Nginx neu geladen wurde.
Sudo nginx -t
Sudo nginx -s reload
Auf dem Mac ist
brew services restart nginx
nicht ausreichend, um Nginx neu zu laden.
4 ... Versuchen Sie, einfache Antworten manuell zu erstellen, um sicherzustellen, dass Ihr Standortpfad nicht fehlerhaft ist. Dies ist besonders hilfreich, wenn Probleme bei der Verwendung von proxy_pass
zum Weiterleiten von Anforderungen an andere laufende Apps auftreten.
location / {
add_header Content-Type text/html;
return 200 'Here I am!';
}
Ein in ;
fehlendes Semikolon /etc/nginx/nginx.conf
beispielsweise in der Zeile vor include /etc/nginx/servers-enabled/*;
kann diese Anweisung einfach umgehen und nginx -t
-Prüfung ist trotzdem erfolgreich.
Überprüfen Sie also einfach, ob alle Anweisungen in /etc/nginx/nginx.conf
mit einem Semikolon ;
abgeschlossen sind.
Haben Sie überprüft, ob Ihre Nginx-Binärdatei wirklich existiert? Bitte überprüfen Sie, ob
#whereis nginx
gibt den binären Pfad aus und überprüft diesen Pfad mit Ihrem Init-Skript aus /etc/init.d/nginx. z.B.
DAEMON=/usr/sbin/nginx
(In meinem Init-Skript wird "test -x $ DAEMON || exit 0" aufgerufen und dieses Skript hat auf jeden Fall nichts zurückgegeben - meine Binärdatei fehlte vollständig)
In meinem Fall zeigten die Ausgaben dieses Netzwerkbefehls, dass nginx korrekt an Port 80 gebunden war, die Ports jedoch mit nmap
nicht von außen zugänglich oder sichtbar waren.
Obwohl ich eine Firewall vermutete, stellte sich heraus, dass alte iptables
-Regeln auf dem Computer Datenverkehr von diesen Ports umleiteten und mit nginx in Konflikt standen. Verwenden Sie Sudo iptables-save
, um alle derzeit geltenden Regeln anzuzeigen.