2014-06-27 15 views
48

I Nginx als Reverse Proxy verwenden, die Anfragen nimmt dann tut eine proxy_pass die eigentliche Web-Anwendung aus dem Upstream-Server auf Port 8001.Nginx Reverse-Proxy verursacht 504-Gateway Timeout

zum Laufen zu bekommen, wenn ich MyWebSite gehen. com oder mache ein wget, ich bekomme ein 504 Gateway Timeout nach 60 Sekunden ... Wenn ich mywebsite.com:8001 lade, wird die Anwendung wie erwartet geladen!

So etwas ist disallowing nginx mit dem Upstream-Server zu kommunizieren ...

alles begann nach meinem Hosting-Unternehmen, die Maschine meine Sachen zurückgestellt wurde, läuft auf, vor, dass keine Probleme, was so überhaupt.

Hier ist mein vhosts Server Block:

server { 

     listen 80; 
     server_name mywebsite.com; 

     root /home/user/public_html/mywebsite.com/public; 

     access_log /home/user/public_html/mywebsite.com/log/access.log upstreamlog; 
     error_log /home/user/public_html/mywebsite.com/log/error.log; 

     location/{ 

        proxy_pass http://xxx.xxx.xxx.xxx:8001; 
        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; 

        } 

     } 

Und die Ausgabe von meinem Nginx Fehlerprotokoll:

2014/06/27 13:10:58 [Fehler] 31406 # 0 : * 1 Upstream-Zeitüberschreitung (110: Zeitüberschreitung der Verbindung) bei Verbindung mit Upstream, Client: xxx.xx.xxx.xxx, Server: mywebsite.com, Anforderung: "GET/HTTP/1.1", Upstream: "http://xxx.xxx.xxx.xxx:8001/", Gastgeber: "mywebsite.com"

+0

Wird auf dem Server SELinux ausgeführt? – CrackerJack9

Antwort

86

Wahrscheinlich kann ein paar Zeilen mehr hinzugefügt werden, um die Timeout-Zeit auf Upstream zu erhöhen. Die folgenden Beispiele stellen das Timeout auf 300 Sekunden:

proxy_connect_timeout  300; 
proxy_send_timeout   300; 
proxy_read_timeout   300; 
send_timeout    300; 
+0

Ich denke, dass die Erhöhung der Timeout ist selten die Antwort, es sei denn, Sie wissen, dass Ihr Netzwerk/Service wird immer oder in einigen Fällen sehr langsam reagieren. Nur wenige Web-Anfragen sollten heutzutage mehr als ein paar Sekunden dauern, es sei denn, du lädst Inhalte (Dateien/Bilder) herunter. – Almund

+0

@Almund Ich dachte das Gleiche (hätte es fast nicht versucht), aber aus welchem ​​Grund auch immer hat das für mich funktioniert. (Zuvor nach 60 Sekunden abgelaufen, jetzt sofort reagieren). –

+0

@Dax Fohl: Das ist neugierig. Ich habe die Quelle heruntergezogen und einen kurzen Blick darauf geworfen, und von dem, was ich sehen kann, wird das Setzen einer Proxy-Einstellung von dem Proxy-Pass eine Reihe von Einstellungen initialisieren, von denen ich annehme, dass der Proxy auf eine andere Weise ausgeführt wird Verhalten. – Almund

20

das Timeout erhöht, wird wahrscheinlich nicht, da Ihr Problem lösen, wie Sie sagen, der eigentliche Ziel-Web-Server reagiert gut.

Ich hatte das gleiche Problem und ich fand, es hatte damit zu tun, kein keep-alive auf der Verbindung zu verwenden. Ich kann nicht wirklich beantworten, warum dies aber ist die Verbindung Header in Clearing ich dieses Problem gelöst und die Anforderung wurde gerade fein proxied:

server { 
    location/{ 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header Host  $http_host; 
     proxy_http_version 1.1; 
     proxy_set_header Connection ""; 
     proxy_pass http://localhost:5000; 
    } 
} 

einen Blick auf diese Beiträge, die ihm näher erläutert: nginx close upstream connection after request Keep-alive header clarification http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive

+0

das ist die gute Antwort – yzT

+1

MONATE von Problemen, die durch eine einzige Zeile 'proxy_set_header Connection" gelöst werden; 'lol, nicht runcloud verwenden – nodws