Назад | Перейти на главную страницу

Сервер возвращает код ошибки http 504 для определенного скрипта

У меня есть 3 сервера, все настроены одинаково для балансировки нагрузки на одном сайте с apache, mod_proxy_fcgi, php5-fpm и кластером mysql / mariaDB galera, работающим на сервере ubuntu 14.04. По большей части все работает нормально, кроме одной страницы. Страница im имеет проблемы с загрузкой и обрабатывает большой CSV-файл (от 7 до 20 тысяч строк), а затем вставляет данные в базу данных. Эта страница работала нормально, когда сайт работал на одном сервере, но дополнительное время, которое требуется кластеру galera для синхронизации двух других серверных швов, является основной причиной проблемы, поскольку это синхронное обновление, блокировка получается и удерживается до тех пор, пока все 3 сервера обновлены. Это незаметно на любой другой странице, но в этом сценарии возвращается ошибка 504, а журнал ошибок apache содержит следующую ошибку.

[proxy_fcgi:error] [pid 24235] [client 99.99.99.99:44197] AH01068: Got bogus version 1,referer: http://example.com/page.php
[proxy_fcgi:error] [pid 24235] (22)Invalid argument: [client 99.99.99.99:44197] AH01075: Error dispatching request to :, referer: http://example.com/page.php

IP-адрес 99.99.99.99 - это фактический IP-адрес сервера, а не клиента, поэтому кажется, что php-fpm не отвечает на proxy_fcgi вовремя (потому что он ожидает mysql), и возвращается тайм-аут. Я безуспешно пытался настроить тайм-аут в конфигурации моего сайта apache, а также тайм-ауты для php-fpm.

моя конфигурация apache выглядит следующим образом

<Proxy fcgi://127.0.0.1:9000>
    ProxySet timeout=1800
</Proxy>
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/$1

также пробовал

ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/$1 connectiontimeout=300 timeout=300

Я не хочу обрабатывать загрузку в фоновом режиме, потому что, когда я обрабатываю страницу, если в файле csv обнаружены ошибки, я использую строку mysql pk, чтобы пользователь мог редактировать информацию и исправлять проблемы. Моим пользователям удобнее ждать эту страницу, чем они возвращаются позже, чтобы проверить ее прогресс.

У меня была похожая проблема при использовании MPM Event на «Apache 2.4.10-1 + deb.sury.org ~ trusty + 1».
Переключение (обратно, как в Apache 2.2) на MPM Worker решило эту проблему:

a2dismod mpm_event && a2enmod mpm_worker && service apache restart

Попробуйте (конечно, когда вы используете MPM Event в своей настройке).