У меня проблемы с настройкой 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 и перезапустил службы, проблема полностью исчезла.
Является 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
Рекомендовано.