If I make a POST request to apache configured with event/fpm which is chunked and has more than 1 chunk, then the data does not arrive at the php script. If I use prefork instead of event/fpm all works fine If I make a non chunked request, or a chunked request with only one chunk, all is fine as well. To reproduce use CURL with post data larger than 64kb Works fine (non chunked request): curl -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" -X POST -d @postdata.dat "http://test.website.de/test.php" Failes (chunked request): curl -H "Transfer-Encoding: chunked" -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" -X POST -d @postdata.dat "http://test.website.de/test.php" Works fine (chunked but < 64kb): curl -H "Transfer-Encoding: chunked" -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" -X POST -d @postdata_small.dat "http://test.website.de/test.php" Note that php://input as well as $_POST is empty when it fails. I noticed this as some of our clients chunk POST requests already after 1024Kb I am using 2.4.54 httpd -V [Fri Dec 02 09:39:38.916798 2022] [so:warn] [pid 11980:tid 140066409769152] AH01574: module systemd_module is already loaded, skipping Server version: Apache/2.4.54 (codeit) Server built: Jun 8 2022 09:34:58 Server's Module Magic Number: 20120211:124 Server loaded: APR 1.7.0, APR-UTIL 1.6.1, PCRE 10.23 2017-02-14 Compiled using: APR 1.7.0, APR-UTIL 1.6.1, PCRE 10.23 2017-02-14 Architecture: 64-bit Server MPM: event threaded: yes (fixed thread count) forked: yes (variable process count) Server compiled with.... -D APR_HAS_SENDFILE -D APR_HAS_MMAP -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled) -D APR_USE_PROC_PTHREAD_SERIALIZE -D APR_USE_PTHREAD_SERIALIZE -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT -D APR_HAS_OTHER_CHILD -D AP_HAVE_RELIABLE_PIPED_LOGS -D DYNAMIC_MODULE_LIMIT=256 -D HTTPD_ROOT="/etc/httpd" -D SUEXEC_BIN="/usr/sbin/suexec" -D DEFAULT_PIDLOG="run/httpd.pid" -D DEFAULT_SCOREBOARD="logs/apache_runtime_status" -D DEFAULT_ERRORLOG="logs/error_log" -D AP_TYPES_CONFIG_FILE="conf/mime.types" -D SERVER_CONFIG_FILE="conf/httpd.conf" apachectl -M Loaded Modules: core_module (static) so_module (static) http_module (static) access_compat_module (shared) actions_module (shared) alias_module (shared) allowmethods_module (shared) auth_basic_module (shared) auth_digest_module (shared) authn_anon_module (shared) authn_core_module (shared) authn_dbd_module (shared) authn_dbm_module (shared) authn_file_module (shared) authn_socache_module (shared) authz_core_module (shared) authz_dbd_module (shared) authz_dbm_module (shared) authz_groupfile_module (shared) authz_host_module (shared) authz_owner_module (shared) authz_user_module (shared) autoindex_module (shared) brotli_module (shared) cache_module (shared) cache_disk_module (shared) cache_socache_module (shared) data_module (shared) dbd_module (shared) deflate_module (shared) dir_module (shared) dumpio_module (shared) echo_module (shared) env_module (shared) expires_module (shared) ext_filter_module (shared) filter_module (shared) headers_module (shared) include_module (shared) info_module (shared) log_config_module (shared) logio_module (shared) macro_module (shared) mime_magic_module (shared) mime_module (shared) negotiation_module (shared) remoteip_module (shared) reqtimeout_module (shared) request_module (shared) rewrite_module (shared) setenvif_module (shared) slotmem_plain_module (shared) slotmem_shm_module (shared) socache_dbm_module (shared) socache_memcache_module (shared) socache_redis_module (shared) socache_shmcb_module (shared) status_module (shared) substitute_module (shared) suexec_module (shared) unique_id_module (shared) unixd_module (shared) userdir_module (shared) version_module (shared) vhost_alias_module (shared) watchdog_module (shared) dav_module (shared) dav_fs_module (shared) dav_lock_module (shared) lua_module (shared) mpm_event_module (shared) proxy_module (shared) lbmethod_bybusyness_module (shared) lbmethod_byrequests_module (shared) lbmethod_bytraffic_module (shared) lbmethod_heartbeat_module (shared) proxy_ajp_module (shared) proxy_balancer_module (shared) proxy_connect_module (shared) proxy_express_module (shared) proxy_fcgi_module (shared) proxy_fdpass_module (shared) proxy_ftp_module (shared) proxy_http_module (shared) proxy_hcheck_module (shared) proxy_scgi_module (shared) proxy_uwsgi_module (shared) proxy_wstunnel_module (shared) ssl_module (shared) systemd_module (shared) cgid_module (shared) perl_module (shared) fcgid_module (shared) php7_module (shared) apreq_module (shared) php.conf: <IfModule mod_php7.c> # Tell the PHP interpreter to handle files with a .php extension. # Proxy declaration <Proxy "fcgi://localhost/"> # we must declare a parameter in here (doesn't matter which) or it'll not register the proxy ahead of time ProxySet disablereuse=off </Proxy> # Redirect to the proxy <FilesMatch \.php$> SetHandler "proxy:fcgi://localhost:9000" </FilesMatch> </IfModule>
When looking for others having this problem it seems to always end up with them using NGINX. And indeed, when using NGINX it works fine. So FPM seems to not be the issue here, but really apache.