2014-12-17 8 views
8

Я только что преобразовал приложение PageKit (mod_perl) в Plack. Это означает, что мне теперь нужно каким-то образом обеспечить выполнение POST_MAX/MAX_BODY, которое ранее обрабатывалось Apache2::Reques t. Самый простой способ сделать это, вероятно, будет просто положить nginx перед приложением, но приложение уже сидит за HAProxy, и я не вижу, как это сделать с HAProxy.Можно ли обеспечить максимальный размер загрузки в Plack :: Middleware без чтения всего тела запроса?

Итак, мой вопрос: Как я могу обеспечить максимальный размер тела в Plack::Middleware без предварительного прочтения всего тела запроса?

В частности, я заинтересован в загрузке файлов. Размер проверки с помощью Plack::Request::Upload равен too late, так как в этот момент все тело было бы прочитано. Приложение будет развернуто через Starman, поэтому psgix.streaming should be true.

ответ

3

Я получил ответ от Tatsuhiko Miyagawa через Twitter. Он говорит: «Если вы развертываете со Starman, слишком поздно даже с промежуточным программным обеспечением, потому что буферизация включена. Я бы сделал это с nginx».

Это отвечает на мой конкретный вопрос, поскольку я имею дело с развертыванием Starman.

He also noted, что «rejecting a bigger upload before reading it on the backend could cause issues in general»

+0

Возможно, не так много проблем, как позволившие загрузки неограниченного размера. Неужели это не может быть оптимальным решением? – LeeGee

+0

Для меня это самый простой. Приложение находится за nginx, которое обеспечивает максимальный размер max_upload, поэтому больше не проблема приложения. Я задавался вопросом, можете ли вы применить его на уровне приложения, чтобы я мог проверить размер max_upload без участия веб-сервера, но я в порядке с настройкой этого способа. – oalders