Heim > Artikel > Backend-Entwicklung > Zugriff auf Back-End-Anwendungen über Nginx, Lösung des ERR_CONTENT_LENGTH_MISMATCH-Problems
Es sind zwei Probleme aufgetreten
1. Die Datumsauswahlfunktion funktioniert nicht
2. Laden Sie eine etwas größere Datei herunter, nur die Hälfte davon kann heruntergeladen werden
Beim Debuggen der Seite wurde ein ERR_CONTENT_LENGTH_MISMATCH-Fehler gefunden
System: CentOS, Nginx, Proxy für Backend-Tomcat
Ursache: Nginx speichert große Dateien im Verzeichnis „proxy_temp“, hat aber keine Lese- und Schreibberechtigungen für dieses Verzeichnis
Lösungsprozess:
Seite debuggen, Fehler auslösen: net::ERR_CONTENT_LENGTH_MISMATCH
Unter Chrome bitte zwischenspeichern oder Aktualisierung erzwingen, Antwortstatus Code ist 200
erzwingt keine Aktualisierung, der Statuscode der Antwort ist 206
Antwort Im Header stimmt die Länge der Inhaltslänge mit der tatsächlichen Länge der Zieldatei überein
führt zu dem oben genannten Fehler bei der Nichtübereinstimmung der Inhaltslänge
Wenn Sie ohne Nginx direkt auf Tomcat zugreifen, tritt kein Fehler auf und das System funktioniert normal.
Nach mehreren Suchen habe ich zunächst einen Beitrag gefunden, der sehr ähnlich ist, und Es wird erwähnt, dass es sich um eine Nginx-gzip-Komprimierung handelt, da Nginx die Datei für die Komprimierung vorbereitet und den Datenstrom entsprechend der komprimierten Länge verarbeitet. Die über den Proxy übertragenen Daten werden jedoch nicht tatsächlich komprimiert und Nginx schließt die Verbindung, bevor die Übertragung abgeschlossen ist .
Dem Protokoll nach zu urteilen, gibt es tatsächlich viele org.apache.catalina.connector.ClientAbortExceptions auf Tomcat, die mit den vorherigen ERRO_CONTENT_LENGTH_MISMATCH-Anfragen übereinstimmen.
Beginnen Sie mit dem Erlernen der Konfiguration von nginx gzip (bereiten Sie sich darauf vor, eine weitere Notiz zu machen)
Das Problem ist nicht gelöst, gehen Sie zuerst schlafen und arbeiten Sie weiter daran, wenn Sie aufwachen
Ich bin aufgewacht und hatte immer noch keine Ahnung, also habe ich ehrlich im Protokoll nachgesehen
/ var/log/nginx/error.log
Aha, das Problem ist hier:
2015/05/30 00:11:53 [crit] 8808#0: *60 open() "/var/cache/nginx/proxy_temp/2/01/0000000012" failed (13: Permission denied) while reading upstream, client:...
nginx läuft als Nginx-Benutzer und hat keine Berechtigungen, boom!
Lösung:
1. Führen Sie nginx als Root aus
2. Setzen Sie den Besitzer des Verzeichnisses „proxy_temp“ auf nginx
3. Stellen Sie die Gruppe des Verzeichnisses „proxy_temp“ auf „nginx“ ein und erteilen Sie rwx-Berechtigungen
4. Deaktivieren Sie den Cache
Ich möchte nicht root verwenden, um Nginx auszuführen, also habe ich Methode 3 gewählt und das System zuerst laufen lassen
Verbleibende Probleme:
1 des Proxy_temp-Verzeichnisstamms überhaupt? Sollte es root sein?
2. Nach der Auswahl von Methode 3 habe ich festgestellt, dass für dieselbe Datei mehrere Caches generiert werden.
3. Wird in unserem Fall Cache benötigt? Ist es eine vernünftigere Wahl, den Cache zu deaktivieren? 2015-05-30
Das Obige stellt vor, wie man über Nginx auf Back-End-Anwendungen zugreift und das ERR_CONTENT_LENGTH_MISMATCH-Problem löst, einschließlich der relevanten Inhalte. Ich hoffe, dass es für Freunde hilfreich ist, die an PHP-Tutorials interessiert sind.