2013-06-06 9 views
6

So hatte ich gerade eine verrückte Stunde versucht, herauszufinden, warum meine Logs ging langsam mit langsamen PHP-Skript Warnungen buchstäblich ein paar Mal pro Minute für die letzten Stunden.php5-fpm + nginx + google bot = Verbindung zurückgesetzt von Peer

Ich konzentrierte mich zunächst auf die langsamen Php-Protokolle und php-Fehlerprotokolle, die ausgingen, dass es mein Code war. Es ist nur so passiert, dass ich einige DNS-Optimierungen implementiert habe, weshalb ich auf den falschen Weg geführt wurde.

Ich überprüfte schließlich das Nginx-Fehlerprotokoll, das Zeile nach Verbindungslinie ergab, die von Peer von ziemlich der gleichen IP zurückgesetzt wurde.

Ich googelte die IPs und fand es gehört zu Google, also war dies eindeutig ein Google Bot/Spider die Website besuchen. Hier

ist ein Clip des Fehlerprotokolls

2013/06/06 14:04:05 [error] 12313#0: *7435269 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 209.85.238.187, server: www.domain.com, request: "GET /c.html?q=xyz HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.domain.com" 
2013/06/06 14:04:05 [error] 12308#0: *7435135 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 209.85.238.167, server: www.domain.com, request: "GET /c.html?q=xyz HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.domain.com" 
2013/06/06 14:04:05 [error] 12308#0: *7435994 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 209.85.238.199, server: www.domain.com, request: "GET /c.html?q=xyz HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.domain.com" 
2013/06/06 14:04:12 [error] 12309#0: *7436209 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 209.85.238.168, server: www.domain.com, request: "GET /c.html?q=xyz HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.domain.com" 
2013/06/06 14:05:12 [error] 12309#0: *7441608 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 209.85.238.177, server: www.domain.com, request: "GET /c.html?q=xyz HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.domain.com" 
2013/06/06 14:05:15 [error] 12310#0: *7440634 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 209.85.238.219, server: www.domain.com, request: "GET /c.html?q= xyz HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.domain.com" 
2013/06/06 14:05:15 [error] 12313#0: *7441634 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 209.85.238.194, server: www.domain.com, request: "GET /c.html?q=xyz HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.domain.com" 
2013/06/06 14:06:02 [error] 12310#0: *7444721 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 209.85.238.221, server: www.domain.com, request: "GET /c.html?q=xyz HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.domain.com" 
2013/06/06 14:06:05 [error] 12308#0: *7443911 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 209.85.238.203, server: www.domain.com, request: "GET /c.html?q=xyz HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.domain.com" 
2013/06/06 14:06:05 [error] 12309#0: *7445423 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 209.85.238.164, server: www.domain.com, request: "GET /c.html?q=xyz HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.domain.com" 
2013/06/06 14:06:05 [error] 12310#0: *7445640 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 209.85.238.222, server: www.domain.com, request: "GET /c.html?q=xyz HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.domain.com" 

Was die Ursache für die Verbindung von Peer zurückgesetzt ist. Würde Google Bot wirklich die Seite besuchen und die Anfrage beenden, nur um zu überprüfen, ob sie am Leben ist?

Das ist nicht sehr schön, weil es meine Curl-Anfragen aufruft, die dann zu einem verwaisten Thread gehören, weil der Client beendet wurde. Bedeutet, dass sie nur Zeit auslassen, was langsame PHP-Skripte verursacht.

Oder habe ich das falsch gelesen?

+0

Goggle Bot wird im Normalfall keine Anfragen beenden. Sie besuchen Seiten auf normale Weise. Manchmal sind die Trefferraten extrem hoch, aber sie beenden keine Verbindungen. –

Antwort

0

Wenn Sie eine der Fehlermeldung suchen, heißt es

während Response-Header von Upstream

Lesen

was bedeutet, dass das Problem nicht ist, dass Google die Anforderung beendet wird, sondern vielmehr, dass nginx der upstream, bei dem es sich um php-fpm handelt, beendet die Anfrage. Normalerweise wird dies durch einen Fehler beim Ausführen des PHP-Codes verursacht.

Da wir den Code nicht haben, hier sind einige allgemeine Schritte zur Fehlerbehebung:

  • In php-fpm Konfiguration, erhöhen Sie die Werte von request_terminate_timeout, max_input_time und max_execution_time.
  • Aktivieren Sie die Fehlerprotokollierung in den Konfigurationsdateien php.ini oder pool .conf (aber nicht "display_error", wenn es sich um eine Produktions-Website handelt).
  • Versuchen Sie, einen Debugger auf den laufenden Code (xdebug ist sehr nützlich), um durch den Code zu gehen, und Sie werden auf die meisten Probleme stolpern.