Я использую 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 …
Спасибо за помощь!
Теперь я понял, что проблема в чанкованных передачах (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
Других решений пока нет …