Рейтинг:0

Возможные причины, по которым Apache не отвечает на порт 443

флаг tr

Предыстория: сервер Debian Stretch amd64 в облаке Google с Apache 2.4.25. Он запускает веб-сайт на основе PHP через proxy_fcgi в PHP-FPM. Серверная база данных — PostgreSQL 10. Пакеты Postgres были установлены из официального репозитория Postgres apt, все остальное — ваниль из репозиториев Debian. Есть перенаправление порта 80 на 443 с сертификатами Let's Encrypt. HTTP/2 и Brotli включены. Существует также обратный прокси-сервер для демона Server-Sent Event на том же сервере (https://github.com/vgno/ssehub).

Сервер работает более 2 лет, но в последние несколько месяцев возникает периодический сбой, когда сайт перестает отвечать на запросы. Обычно это проходит через пару минут. Я провел большой анализ журналов, и, похоже, это не связано с серверными процессами. Использование ЦП номинальное, использование памяти низкое, в логах Apache, PostgreSQL, FPM, syslog, ssehub ошибок нет. На сервере также установлен fail2ban, но для него также нет записей в журнале. Я добавил дополнительные диагностические журналы в Apache и FPM, чтобы проверять запросы, обработка которых занимает много времени, но это ничего не дало.

Вот вывод из iptables -L:

Сеть INPUT (политика ACCEPT)
целевая защита выбор источника назначения         
f2b-sshd tcp -- в любом месте многопортовый порт ssh
DROP udp -- где угодно и где угодно udp dpt:l2f policy match dir in pol none
УДАЛИТЬ все -- везде где угодно ctstate INVALID
ПРИНЯТЬ все -- где угодно и где угодно ctstate СВЯЗАННО, УСТАНОВЛЕНО
ПРИНЯТЬ udp -- в любом месте многопортовый dports isakmp,ipsec-nat-t
ПРИНЯТЬ udp -- где угодно и где угодно udp dpt:l2f policy match dir в poli ipsec
УДАЛИТЬ udp -- где угодно udp dpt:l2f

Сеть FORWARD (политика ACCEPT)
целевая защита выбор источника назначения         
УДАЛИТЬ все -- везде где угодно ctstate INVALID
ПРИНЯТЬ все -- где угодно и где угодно ctstate СВЯЗАННО, УСТАНОВЛЕНО
ПРИНИМАТЬ все -- в любом месте в любом месте            
ПРИНЯТЬ все -- 192.168.42.0/24 192.168.42.0/24     
ПРИНЯТЬ все -- где угодно 192.168.43.0/24 ctstate СВЯЗАННО, УСТАНОВЛЕНО
ПРИНИМАТЬ все -- 192.168.43.0/24 где угодно            
УДАЛИТЬ все -- в любом месте в любом месте            

Цепочка OUTPUT (политика ACCEPT)
целевая защита выбор источника назначения         

Цепочка f2b-sshd (1 ссылка)
целевая защита выбор источника назначения         
RETURN all -- в любом месте в любом месте            

Любые предложения по возможным причинам или вещам, которые я должен проверить? На данный момент единственной причиной, о которой я могу думать, является перегрузка сети, но это очень трудно доказать, поскольку это непостоянная проблема, и обычно она исчезает к тому времени, когда я узнаю об этом и начинаю проводить некоторые тесты. Кроме того, кажется удивительным, что у Google Cloud такие частые проблемы с сетью.Есть ли у Google какие-то правила формирования трафика, о которых я не знаю? Это сервер с очень низким трафиком, и проблема часто возникает в нерабочее время, когда сайт практически никто не использует.

Jyothi Kiranmayi avatar
флаг at
1. Когда возникла проблема? 2. Вносили ли вы какие-либо изменения в свой экземпляр виртуальной машины (например, устанавливали приложение, настраивали брандмауэры и т. д.)? Выполните следующую команду и поделитесь снимком экрана с результатом и проверьте, прослушивается ли порт 443 (вы должны увидеть «Слушать 443»). $ кошка /etc/apache2/ports.conf
Kitserve avatar
флаг tr
Никаких изменений в конфигурацию сервера или код сайта внесено не было. Сервер прослушивает порт 443 — как я уже сказал, это прерывистая ошибка. В большинстве случаев сайт отвечает нормально. Я не уверен точно, когда проблема началась, но впервые о ней сообщили около 6 месяцев назад.
Bakul Mitra avatar
флаг cn
Можете ли вы проверить всякий раз, когда возникает прерывистая проблема, можете ли вы подключить службу приложений (веб-сайт) из другого экземпляра виртуальной машины в той же сети? Используете ли вы какой-либо балансировщик нагрузки за экземпляром виртуальной машины?
Kitserve avatar
флаг tr
Балансировщика нагрузки нет.В следующий раз, если мне удастся поймать это, пока проблема не устранена, я попытаюсь подключиться из нескольких разных мест. Не уверен, что какие-либо другие мои виртуальные машины находятся в той же сети, но я проверю.
Abhijith Chitrapu avatar
флаг tr
@Kitserve вы проверили, и ваша проблема решена?
Kitserve avatar
флаг tr
Нет, не решено. Я разработал несколько тестов, чтобы попробовать, когда проблема возникнет в следующий раз, в основном tcptraceroute, как описано в https://support.opendns.com/hc/en-us/articles/227989007-How-to-Running-a-TCP. -Трассировка. Поскольку я разместил исходный вопрос, проблема больше не появлялась, поэтому у меня больше нет диагностической информации, которой я мог бы поделиться.
Srividya avatar
флаг cn
Для дальнейшей изоляции, пожалуйста, предоставьте мне следующую информацию: Пожалуйста, проверьте, отвечает ли сервер apache (например, работает ли apache?) Вы можете подключиться к порту 443? Актуален ли сертификат? Вы можете подключиться через SSL/TLS с помощью openssl s_client -connect localhost:443 Можете ли вы поделиться со мной журналами tcpdump и apache во время выпуска.
Kitserve avatar
флаг tr
Я ценю ответы, но я думал, что достаточно ясно сказал в исходном выпуске, что это **периодическая** проблема. Обычно Apache отвечает как обычно. Порт 443 открыт, сертификат настроен правильно, и сайт работает как положено *почти* в 100% случаев. Если бы я мог поймать проблему во время ее возникновения и запустить некоторые тесты, у меня было бы гораздо лучшее представление о том, что происходит. Мой вопрос заключается в том, есть ли у кого-нибудь какие-либо предложения о возможных причинах того, что Apache случайным образом перестает отвечать на запросы без появления каких-либо записей в журнале. Спасибо.
Jyothi Kiranmayi avatar
флаг at
Возможны проблемы с памятью, которые мешают Apache отвечать на запросы (http/https). Также проверьте настройки в файле конфигурации (httpd.conf): **AcceptFilter http нет, AcceptFilter https нет** . Я бы посоветовал в следующий раз, когда вы запустите его, запустить трассировку, чтобы после его смерти вы могли исследовать, какие вызовы происходили последними, прежде чем он сбой. Вы можете использовать следующую команду после ее запуска, чтобы убедиться, что вы присоединились к главному процессу, всем его дочерним процессам и любым новым, которые разветвляются.
Jyothi Kiranmayi avatar
флаг at
список = ''; для pid в `ps ax | grep httpd | awk '{print $1}'`; сделать pidlist="$pidlist -p $pid"; сделано; strace -tt -F -f $pidlist 2>&1 |tee /root/apache_strace.out если процесс Apache называется httpd или как-то еще (например, apache или apache2), но если это не httpd, то замените правильное имя в приведенной выше команде.
Kitserve avatar
флаг tr
Спасибо, я не знал о AcceptFilter, в настоящее время нет никаких ссылок на него в конфигурации, поэтому я проверю это, а также strace. Я думал о проблемах с памятью, но если бы это произошло, я бы ожидал увидеть что-то на графиках munin, а также какую-то ссылку на OOM Killer в журнале ошибок.Сервер имеет 4 ГБ ОЗУ и обычно работает менее чем на 25% от этого, поэтому должен быть довольно резкий всплеск использования памяти, чтобы не было никаких намеков.
Abhijith Chitrapu avatar
флаг tr
@Kitserve вы проверили, и ваша проблема решена?
Kitserve avatar
флаг tr
Проблема больше не появлялась с тех пор, как я открыл этот вопрос, поэтому она не решена, поскольку у меня нет новой диагностической информации для работы. Я обновлю или закрою этот вопрос, если что-то изменится.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.