- Вопрос или проблема
- Вот пример запроса, который я отправляю на свой сервер:
- Мои логи Apache2:
- А вот пример запроса HTTPs, который, похоже, всегда работает:
- Ответ или решение
- 1. Анализ ситуации
- 2. Возможные причины ошибки
- a) Конфигурация виртуальных хостов:
- b) Модули и их конфликт:
- c) Условия работы сервера:
- d) Доступ по локальному IP:
- 3. Рекомендации по решению проблем
- 4. Заключение
Вопрос или проблема
В последние несколько недель я заметил, что мои веб-сайты довольно часто зависают, иногда они недоступны, но через какое-то время они снова начинают работать.
До сих пор я объяснял эту проблему некоторыми работами на стороне Cloudflare и не придавал этому большого значения, но только что заметил, что запросы даже к моему DynDNS от моего интернет-провайдера, которые делают мой сервер доступным в интернете, также не проходят через Cloudflare и не удаются. Интересно, что это происходит только при использовании HTTP, но не HTTPS.
Это, безусловно, проблема сервера, так как даже перечисление директорий или доступ к несуществующему пути, который должен возвращать 404, не работает.
Вот пример запроса, который я отправляю на свой сервер:
GET http://mainsite.ro/
User-Agent: firefox
Accept: *
Host: mainsite.ro
Accept-Encoding: deflate, gzip, identity
И мой сервер ответил:
Content-Type: text/html;charset=UTF-8
Content-Length: 0
Connection: close
Cache-control: no-cache
Мои логи Apache2:
[Вт Ноя 05 13:05:51.861763 2024] [php:warn] [pid 299659] [client 162.158.79.58:31474] PHP Warning: Undefined array key 1 in /var/www/codrutsoft.com/_data/database/netapps/file-bin/index.php on line 4
[Вт Ноя 05 13:28:46.363513 2024] [pagespeed:error] [pid 299558] [mod_pagespeed 1.13.35.2-0 @299558] PageSpeed Serf fetch failure rate extremely high; only 2 of 11 recent fetches fully successful; is fetching working?
[Вт Ноя 05 14:48:20.259543 2024] [autoindex:error] [pid 199451] [client 86.126.67.12:35638] AH01276: Cannot serve directory /var/www/mainsite.ro/www/img/: No matching DirectoryIndex (index.html,index.cgi,index.pl,index.php,index.xhtml,index.htm) found, and server-generated directory index forbidden by Options directive
[Вт Ноя 05 14:54:10.553472 2024] [mpm_prefork:notice] [pid 500788] AH00169: caught SIGTERM, shutting down
[Вт Ноя 05 14:54:10.750487 2024] [mpm_prefork:notice] [pid 1094019] AH00163: Apache/2.4.41 (Ubuntu) OpenSSL/1.1.1f configured -- resuming normal operations
[Вт Ноя 05 14:54:10.750587 2024] [core:notice] [pid 1094019] AH00094: Command line: '/usr/sbin/apache2'
[Вт Ноя 05 14:54:38.022673 2024] [autoindex:error] [pid 1094020] [client 86.126.67.12:59847] AH01276: Cannot serve directory /var/www/mainsite.ro/www/img/: No matching DirectoryIndex (index.html,index.cgi,index.pl,index.php,index.xhtml,index.htm) found, and server-generated directory index forbidden by Options directive
[Вт Ноя 05 14:56:07.603159 2024] [mpm_prefork:notice] [pid 1094019] AH00169: caught SIGTERM, shutting down
[Вт Ноя 05 14:56:07.808091 2024] [mpm_prefork:notice] [pid 1105218] AH00163: Apache/2.4.41 (Ubuntu) OpenSSL/1.1.1f configured -- resuming normal operations
[Вт Ноя 05 14:56:07.808175 2024] [core:notice] [pid 1105218] AH00094: Command line: '/usr/sbin/apache2'
А вот пример запроса HTTPs, который, похоже, всегда работает:
GET http://mainsite.ro/
User-Agent: firefox
Accept: *
Host: mainsite.ro
Accept-Encoding: deflate, gzip, identity
С ответом:
Date: Tue, 05 Nov 2024 13:11:26 GMT
Server: Apache/2.4.41 (Ubuntu)
Accept-Ranges: bytes
X-Mod-Pagespeed: 1.13.35.2-0
Vary: Accept-Encoding
Content-Encoding: gzip
Cache-Control: max-age=0, no-cache, s-maxage=10
Content-Length: 897
Content-Type: text/html
Кроме того, доступ к моему сайту напрямую по IP также не работает, но доступ к локальному IP (192.168.1.101) работает без проблем.
Я не имею представления, что может быть причиной этого, но это довольно раздражающая проблема, так как в логах ничего не объясняет, почему это может происходить.
Ответ или решение
Проблема, с которой вы столкнулись, связана с тем, что ваш сервер Apache2 иногда перестает обслуживать HTTP-запросы, в то время как HTTPS-запросы продолжают обрабатываться корректно. Это поведение требует глубокого анализа, поскольку оно может быть связано с несколькими факторами, такими как конфигурация сервера, использование модулей, влияние внешних факторов и т.д.
1. Анализ ситуации
Судя по вашему описанию, проблема возникает случайным образом. Вы отметили, что запросы на HTTP возвращают пустые ответы, тогда как запросы на HTTPS работают нормально. Это указывает на потенциальные проблемы с конфигурацией Apache для HTTP.
2. Возможные причины ошибки
a) Конфигурация виртуальных хостов:
Проверьте наличие ошибки в конфигурационных файлах виртуальных хостов. Важно убедиться, что виртуальный хост для HTTP настроен так же корректно, как и для HTTPS. Убедитесь, что в конфигурации не используется неправильный ServerName
или ServerAlias
.
b) Модули и их конфликт:
Смотрим на вывод логов, были указаны ошибки, связанные с mod_pagespeed
. Если это модуль включен, он может создавать проблемы с обработкой HTTP-запросов. Возможно, стоит временно отключить его, чтобы проверить, устраняет ли это проблему.
c) Условия работы сервера:
Проблема может возникать из-за перегрузки сервера. В вашем логе есть записи о том, что Apache останавливается, что также может указывать на нехватку ресурсов (например, памяти или ЦП). Проверьте настройки MaxRequestWorkers
и увеличьте его значение, если ресурсное обеспечение сервера позволяет это сделать.
d) Доступ по локальному IP:
Факт, что доступ к веб-серверу по локальному IP работает безупречно, в то время как доступ через внешний IP вызывает проблемы, говорит о том, что могут быть настройки сети (например, брандмауэр или NAT), которые блокируют HTTP-запросы. Проверьте правила брандмауэра и настройки маршрутизатора, чтобы убедиться, что они не препятствуют HTTP-трафику.
3. Рекомендации по решению проблем
-
Тестирование конфигурации:
Запустите командуapachectl configtest
для проверки конфигурации Apache. Это поможет выявить синтаксические ошибки или неправильные настройки. -
Логи:
Внимательно изучите другие логи, такие как/var/log/syslog
или/var/log/apache2/error.log
, в поисках дополнительных подсказок о причине остановок. -
Мониторинг ресурсов:
Используйте инструменты мониторинга, такие какhtop
,vmstat
или специализированные решения для контроля загрузки ресурсов сервера в моменты возникновения проблем. -
Настройка модулей:
Если использованиеmod_pagespeed
вызывает проблемы, отключите его и проверьте, исчезнет ли проблема с HTTP. Альтернативно, обновите конфигурацию модуля и Apache до последних версий. -
Оптимизации сети:
Рассмотрите возможность настройки правил маршрутизации и брандмауэра для обеспечения корректной работы с HTTP-трафиком.
4. Заключение
Ваши проблемы с HTTP на сервере Apache2 могут быть вызваны различными факторами, начиная от конфигурационных ошибок и заканчивая перегрузкой ресурсов. Применив вышеуказанные методы анализа и оптимизации, вы сможете более точно выявить и устранить причину данной ситуации. Если после всех проверок проблема не исчезнет, возможно, стоит рассмотреть более детальную диагностику с использованием профилирования серверных процессов или привлечение специалистов.