Мне кажется, я знаю проблему сейчас.Тот факт, что он возвращает 404 и обрабатывает ваш скрипт, говорит мне, что error_page - это то, что делает «rewrite» для получения запроса к /index.php.Страница error_page в неназванное место преобразует запрос в GET, поэтому error_page 404 /index.php выполняет внутреннее перенаправление в /index.php, но в процессе удаляет тело запроса (и отсутствие= означает, что код состояния не перезаписывается целью error_page).Я не уверен, почему все эти ifs не выполняют перенаправление (если обработка в nginx действительно странная, так что это хорошая идея, чтобы избежать их), но я думаю, что если вы используете именованное расположение для вашей страницы ошибки, это будетсохраните тело запроса и заполните $ _POST.Попробуйте заменить текущую директиву error_page на:
location @redir {
rewrite ^ /index.php;
}
error_page 404 = @redir;