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

Как я могу исправить повторяющиеся ошибки PHP 503 на моем сервере Apache-mod_proxy_fcgi-PHP-FPM?

У меня проблемы с настройкой php-fpm. Может вы, ребята, укажете мне правильное направление. Во-первых, все работает нормально. Но время от времени я получаю 503 ошибки. Эти ошибки исчезнут после перезагрузки веб-сайта. Они появляются только на сайтах php и не изолированы от одного домена или одного фреймворка. Я получаю 503 ошибки в PHPmyAdmin, Wordpress и Typo3. Это 3 сайта, которые я тестировал. Они находятся на отдельных виртуальных хостах и ​​имеют разные пулы php-fpm, но используют один и тот же мастер-процесс php-fpm.

Я использую сервер Apache 2.4 (MPM-Event Workers) без mod_php или cgi / fastcgi. Вместо этого я использую mod_proxy и mod_proxy_fcgi для передачи каждого файла .php моему процессу php-fpm. Следует отметить, что сервер еще не запущен в производство, поэтому трафик практически отсутствует. Серверное оборудование мощное, 12 виртуальных ядер и 32 ГБ оперативной памяти.

Мои настройки mod_proxy и mod_proxy_fcgi по умолчанию - я там ничего не менял.

Моя конфигурация vhost (часть прокси):

<FilesMatch "\.php$">
        SetHandler "proxy:unix:///opt/php-5.6.11/var/run/php5-fpm-mywebsite.sock|fcgi://mywebsite/"
    </FilesMatch>
    <Proxy fcgi://mywebsite/ enablereuse=on retry=0>
</Proxy>

Примечание: у меня раньше было max = 10 в директиве Proxy, и казалось, что это чаще вызывает ошибку 503. Теперь, когда я удалил max = 10, кажется, что это происходит меньше. Хотя может быть просто совпадением.

Моя конфигурация пула PHP-FPM (соответствующие части):

listen = var/run/php5-fpm-mywebsite.sock
listen.owner = mywebsite
listen.group = www-data
listen.mode = 0660
listen.backlog = 65535

user = mywebsite
group = www-data
listen.allowed_clients = 127.0.0.1

pm = ondemand
pm.max_children = 20
pm.process_idle_timeout = 15s

request_terminate_timeout = 300s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = no

Моя конфигурация PHP-FPM (соответствующие части):

emergency_restart_threshold = 10
emergency_restart_interval = 1m
process_control_timeout = 10
events.mechanism = epoll

Мой PHP.ini для основного процесса PHP-FPM. Все, что здесь не указано, либо является настройками php по умолчанию, либо не имеет значения:

memory_limit = 400M
upload_max_filesize = 20M
post_max_size = 20M
max_execution_time = 600
max_input_time  = -1
max_input_vars = 10000
suhosin.get.max_vars = 10000
suhosin.post.max_vars = 10000

[Zend]
zend_extension=/opt/php-5.6.11/lib/php/extensions/no-debug-non-zts-20131226/ioncube.so
zend_extension=opcache.so
opcache.revalidate_freq=0
;opcache.validate_timestamps=0
opcache.max_accelerated_files=50000
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.fast_shutdown=1

[APC]
extension=apcu.so
apc.enabled=1
apc.shm_segments = 1
apc.shm_size=256M
apc.ttl=7200
apc.user_ttl=7200
apc.gc_ttl=3600
apc.stat=1
apc.enable_cli=0
apc.file_update_protection=2
apc.max_file_size=2M
apc.include_once_override=0
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.cache_by_default=1
apc.use_request_time=1
apc.slam_defense=0
apc.stat_ctime=0
apc.canonicalize=1
apc.write_lock=1
apc.report_autofilter=0
apc.rfc1867=0
apc.rfc1867_prefix =upload_
apc.rfc1867_name=APC_UPLOAD_PROGRESS
apc.rfc1867_freq=0
apc.rfc1867_ttl=3600
apc.lazy_classes=0
apc.lazy_functions=0

extension=memcache.so
extension=memcached.so

Примечание. В Memcached выделено 1 ГБ памяти.

Журнал ошибок Apache

Фактическое сообщение об ошибке из журнала ошибок apache. Сообщение об ошибке всегда одно и то же. (Я включил подробное ведение журнала прокси):

[proxy:debug] [pid 141760:tid 140526898214656] mod_proxy.c(1159): [client myclient] AH01143: Running scheme unix handler (attempt 0), referer: http://mywebsite/website/typo3/install/index.php?TYPO3_INSTALL[type]=cleanup
[proxy_fcgi:debug] [pid 141760:tid 140526898214656] mod_proxy_fcgi.c(879): [client myclient] AH01076: url: fcgi://mywebsite//var/www/html/mywebsite/htdocs/typo3site/website/index.php proxyname: (null) proxyport: 0, referer: http://mywebsite/website/typo3/install/index.php?TYPO3_INSTALL[type]=cleanup
[proxy_fcgi:debug] [pid 141760:tid 140526898214656] mod_proxy_fcgi.c(886): [client myclient] AH01078: serving URL fcgi://mywebsite//var/www/html/mywebsite/htdocs/typo3site/website/index.php, referer: http://mywebsite/website/typo3/install/index.php?TYPO3_INSTALL[type]=cleanup
[proxy:debug] [pid 141760:tid 140526898214656] proxy_util.c(2147): AH00942: FCGI: has acquired connection for (mywebsite)
[proxy:debug] [pid 141760:tid 140526898214656] proxy_util.c(2200): [client myclient] AH00944: connecting fcgi://mywebsite//var/www/html/mywebsite/htdocs/typo3site/website/index.php to mywebsite:8000, referer: http://mywebsite/website/typo3/install/index.php?TYPO3_INSTALL[type]=cleanup
[proxy:debug] [pid 141760:tid 140526898214656] proxy_util.c(2237): [client myclient] AH02545: fcgi: has determined UDS as /opt/php-5.6.11/var/run/php5-fpm-mywebsite.sock, referer: http://mywebsite/website/typo3/install/index.php?TYPO3_INSTALL[type]=cleanup
[proxy:debug] [pid 141760:tid 140526898214656] proxy_util.c(2409): [client myclient] AH00947: connected //var/www/html/mywebsite/htdocs/typo3site/website/index.php to httpd-UDS:0, referer: http://mywebsite/website/typo3/install/index.php?TYPO3_INSTALL[type]=cleanup
[proxy_fcgi:error] [pid 141760:tid 140526898214656] [client myclient] AH01067: Failed to read FastCGI header, referer: http://mywebsite/website/typo3/install/index.php?TYPO3_INSTALL[type]=cleanup
[proxy_fcgi:error] [pid 141760:tid 140526898214656] (104)Connection reset by peer: [client myclient] AH01075: Error dispatching request to : , referer: http://mywebsite/website/typo3/install/index.php?TYPO3_INSTALL[type]=cleanup
[proxy:debug] [pid 141760:tid 140526898214656] proxy_util.c(2162): AH00943: FCGI: has released connection for (mywebsite)

Теперь мой вопрос:

Как я могу исправить повторяющиеся ошибки PHP 503 на моем веб-сервере?

Мои мысли:

Я не специалист по этим вещам, поэтому мне сложно во всем разобраться. Apache с php-fpm тоже не кажется таким распространенным, большинство результатов Google основано на nginx, что мне не очень помогает.

Может здесь кто-нибудь мне поможет?

Большое спасибо!!

У меня была такая же проблема, и после попытки понять, в чем причина, я обнаружил, что для нас причиной был баг с плагином.

В частности, мы исправили проблему, отключив этот плагин для wordpress: https://wordpress.org/plugins/custom-css-js/

Мы использовали php 7 и wordpress 4.5.6.

Так что для нас это было не из-за неправильной конфигурации php, apache или какой-либо системы кеширования. Также проблема не связана с отсутствием доступных ресурсов (ЦП / ОЗУ). Проблема возникла из-за неправильного плагина.

Было очень сложно найти, какие плагины вызвали проблему. Мы все поняли благодаря параметрам отладки php, поэтому я предлагаю добавить эти строки ниже в wp-config.php для отладки:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors',0);

Удачи!

Удалите параметр enablereuse = on в строке прокси, чтобы он читался

<Proxy fcgi://mywebsite/ retry=0>

Это решило для меня проблему «Ошибка отправки запроса на:, referer ...».

Как предполагалось в других сообщениях, enablereuse=on не следует использовать, когда демон PHP-FPM работает через сокет Unix.

Документация Apache для mod_proxy_fcgi подтверждает это, говоря:

UDS в настоящее время не поддерживает повторное использование подключения

UDS означает сокеты домена Unix, что означает, когда вы запускаете PHP-FPM как сокет (.sock) вместо метода порта TCP по умолчанию.

Натан Захари подробно описывает настройку Apache + PHP-FPM в качестве сокета., среди других связанных тем.

Я испытал сумасшедшие, непредсказуемые ответы Apache сразу после выполнения POST с enablereuse = on и UDS. Как только я удалил enablereuse = on и перезапустил службы, проблема полностью исчезла.

Еще симптомы и отладка этой проблемы от людей mod_h2.

Является listen = var/run/php5-fpm-mywebsite.sock верный ?

Что касается случая виртуального хоста, вы можете попробовать эту конфигурацию:

  • Apache (в VirtualHost тег )

    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/DOCUMENT_ROOT_OF_VHOST/$1
    
  • Пул PHP-FPM

    listen = 127.0.0.1:9000
    

Если вас не беспокоит .htaccess , nginx Рекомендовано.