apache + proxy_fcgi_module + php-fpm: большая полезная нагрузка POST пуста

Я использую Apache 2.4.10 с proxy_fcgi в сочетании с php-fpm (7.0.29) на моем веб-сервере.

<IfModule proxy_fcgi_module>
<FilesMatch ".+\.ph(p[3457]?|t|tml)$">
SetHandler "proxy:unix:/var/www/xxx/php/php7.0-fpm.sock|fcgi://localhost"</FilesMatch>
</IfModule>

Когда я отправляю запрос POST с большой полезной нагрузкой (> 1 МБ), я получаю следующую строку в журнале ошибок Apache

[Fri Apr 06 15:33:51 2018] [proxy_fcgi:error] [pid 24162:tid (32)Broken pipe: [client 84.63.x.x:37536] AH01075: Error dispatching request to : (sending stdin), referer: -, request: /index.php, querystring: -

И в моем PHP-коде я получил пустую полезную нагрузку, когда я прочитал ее из stdin:

$payload =file_get_contents('php://input');

Все работает с меньшей полезной нагрузкой. Есть идеи, что не так? Я не могу найти какие-либо настройки лимита для proxy_fcgi …

Спасибо за помощь!

0

Решение

Теперь я понял, что проблема в чанкованных передачах (Transfer-Encoding: chunked), где заголовок Content-Length не отправляется. mod_proxy_fcgi, похоже, не поддерживает это правильно.

Таким образом, единственно возможное решение, по-видимому, заключается в использовании mod_php, который выполняется непосредственно внутри процесса apache, а не через FastCGI, или переключается на NginX …

Прочитайте эту статью для получения дополнительной информации: https://www.jeffgeerling.com/blog/2017/apache-fastcgi-proxyfcgi-and-empty-post-bodies-chunked-transfer

Другой обходной путь, кажется, заставляет протокол HTTP / 1.0, который не поддерживает фрагментированные передачи, вынуждает клиентов отправлять целые данные в одном запросе. Но это — в моем случае — нарушает рукопожатие TLS в моем git-клиенте.

Поскольку я использую свой PHP-скрипт для прокси на Git-сервере, решение для меня — поднять http-буфер git-клиента, пока я не смогу переключиться на NginX.

git config http.postBuffer 524288000
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]