Heim  >  Artikel  >  Backend-Entwicklung  >  Zugriff auf Back-End-Anwendungen über Nginx, Lösung des ERR_CONTENT_LENGTH_MISMATCH-Problems

Zugriff auf Back-End-Anwendungen über Nginx, Lösung des ERR_CONTENT_LENGTH_MISMATCH-Problems

WBOY
WBOYOriginal
2016-08-08 09:23:305232Durchsuche

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:...

proxy_temp-Verzeichnis, Eigentümer ist Root, RWX-Berechtigungen, andere Benutzer haben keine Berechtigungen.

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.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn