2014-12-17 17 views
8

Ich habe gerade eine PageKit (mod_perl) -Anwendung zu Plack konvertiert. Dies bedeutet, dass ich jetzt eine Möglichkeit brauche, um den POST_MAX/MAX_BODY zu erzwingen, den Apache2::Reques t zuvor behandelt hätte. Der einfachste Weg, dies zu tun, wäre wahrscheinlich nur Nginx vor der App zu setzen, aber die App sitzt bereits hinter HAProxy und ich sehe nicht, wie dies mit HAProxy zu tun.Ist es möglich, eine maximale Upload-Größe in Plack :: Middleware zu erzwingen, ohne den gesamten Inhalt der Anfrage zu lesen?

Also, meine Frage ist , wie ich der ganze Körper des Antrags zunächst eine maximale Körpergröße in Plack::Middleware über die Durchsetzung ohne lesen gehen könnte?

Ich bin speziell mit Datei-Uploads betroffen. Die Überprüfung der Größe über Plack::Request::Upload ist too late, da der gesamte Körper an dieser Stelle gelesen worden wäre. Die App wird über Starman, also psgix.streaming should be true, bereitgestellt.

Antwort

3

Ich bekam eine Antwort von Tatsuhiko Miyagawa über Twitter. Er sagt: "Wenn Sie mit Starman arbeiten, ist es sogar mit der Middleware zu spät, weil die Pufferung aktiviert ist. Ich würde es mit nginx machen".

Dies beantwortet meine spezielle Frage, da es sich um eine Starman-Bereitstellung handelt.

He also noted, dass „rejecting a bigger upload before reading it on the backend could cause issues in general

+0

Vielleicht nicht so viele Probleme wie erlaubt den Upload von unbegrenzter Größe. Sicherlich kann dies nicht die optimale Lösung sein. – LeeGee

+0

Für mich ist es das einfachste. Die App sitzt hinter nginx, was die max_upload-Größe erzwingt, so dass es nicht mehr das Problem der App ist. Ich hatte mich gefragt, ob Sie es auf der Anwendungsebene erzwingen könnten, so dass ich die max_upload-Größe testen könnte, ohne einen Webserver einzubinden, aber ich bin damit einverstanden, es auf diese Weise einzurichten. – oalders