Вопрос или проблема
У меня есть Apache/2.2.22 на Ubuntu 12.04. Apache настроен как реверсивный прокси сервер.
Когда к нему обращается удаленная система, страница и содержимое отображаются. Но через некоторое время сервер, кажется, отказывается принимать дальнейшие запросы. Консоль удаленного браузера показывает ошибку “net::ERR_CONNECTION_TIMED_OUT”. Однако, когда IP удаленной машины изменяется (с помощью устройства, которое меняет IP при каждом подключении/отключении), страница/содержимое снова отображается. Но вышеупомянутые проблемы возникают снова.
Также с Apache работает tomcat7. Tomcat обслуживает страницу jsf через порт 8080. Все остальные запросы обрабатываются Apache, который проксирует их на виртуальную машину.
В файле apache2.conf
я в основном просмотрел/изменил эти директивы
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 2
Include proxy.conf
ServerLimit 350
StartServers 20
MinSpareServers 75
MaxSpareServers 150
MaxClients 320
В proxy.conf
<VirtualHost *:3000>
ServerName server_name
ErrorLog ${APACHE_LOG_DIR}/cartodb_error.log
LogLevel debug
CustomLog ${APACHE_LOG_DIR}/cartodb_custom.log combined
<Proxy balancer://mycluster>
BalancerMember http://cartodb.user:3002
</Proxy>
ProxyPass / balancer://mycluster/ maxattempts=10000000
ProxyPassReverse / balancer://mycluster/
<VirtualHost *:8182>
ServerName server_name
ErrorLog ${APACHE_LOG_DIR}/windshaft_error.log
LogLevel debug
CustomLog ${APACHE_LOG_DIR}/windshaft_custom.log combined
<Proxy balancer://mycluster>
BalancerMember http://cartodb.user:8182
</Proxy>
ProxyPass / balancer://mycluster/ maxattempts=10000000
ProxyPassReverse / balancer://mycluster/
также аналогичные директивы VirtualHost с портами 8082, 8889 с аналогичными настройками. “cartodb.user” был добавлен в файл /etc/hosts для перенаправления на VirtualBox. Также был отключен брандмауэр для VirtualBox. VirtualBox также работает на Ubuntu 12.04.
В ports.conf
NameVirtualHost *:80
NameVirtualHost *:8889
NameVirtualHost *:8082
NameVirtualHost *:8182
NameVirtualHost *:3000
Listen 80
Listen 8889
Listen 8082
Listen 8182
Listen 3000
Включенные модули:
actions.conf,actions.load,alias.conf,alias.load,authz_host.load,
cache.load,cgid.conf,cgid.load,proxy_ajp.load,proxy_balancer.conf,
proxy_balancer.load,proxy.conf,proxy_connect.load,proxy_ftp.conf,proxy_ftp.load,
proxy_html.conf,proxy_html.load,proxy_http.load,proxy.load,
proxy_scgi.load,rewrite.load
В reqtimeout.conf
RequestReadTimeout header=20-40,minrate=500
RequestReadTimeout body=10,minrate=500
Просмотр журналов Apache не дал никакой ошибки, когда LogLevel
установлен в режиме отладки. Пожалуйста, укажите, как избежать этой ситуации
Пробовали ли вы использовать другой браузер?
Так как ваше сообщение об ошибке не является обычной ошибкой веб-сервера/приложения, попробуйте сначала другой браузер.
Возможно, ваше веб-сервер не может принимать больше подключений. Вы можете проверить это, включив mod_status.
У меня была такая же проблема.
В моем случае проблема была не в конфигурации Apache.
Проблема была с сетью, в которой находится сервер, в моем случае я использую AWS.
IP-адреса с моего сервера не были настроены как “Elastic IPs”, и это приводило к этой проблеме. Единственное изменение было изменить на “Elastic IP”, и проблема исчезла.
Ответ или решение
Ошибка "net::ERR_CONNECTION_TIMED_OUT" указывает на то, что попытка установить соединение с сервером завершилась неудачей из-за истечения времени ожидания. С точки зрения IT-специалиста, есть несколько причин, которые могут вызывать данную проблему. Рассмотрим их более детально и предложим решения.
Теория
Основная задача при решении проблемы "net::ERR_CONNECTION_TIMED_OUT" заключается в определении точки разрыва в процессе передачи данных между клиентом и сервером.
-
Ограничения сетевых подключений: Параметры конфигурации Apache и самой сети могут ограничивать количество одновременных подключений, которые сервер может обрабатывать. Это может привести к сбоям при достижении этого лимита.
-
Перегруженность сервера: При увеличении трафика сервер может оказаться не в состоянии обрабатывать все входящие запросы, что приводит к тайм-аутам.
-
Проблемы с конфигурацией обратного прокси: Некорректные настройки обратного прокси могут вызвать задержки в маршрутизации запросов от Apache к Tomcat.
-
Сетевая инфраструктура: Некорректная работа сетевого оборудования или брандмауэров может блокировать или отклонять определённые запросы.
-
Изменение IP-адреса клиента: В случае, когда IP-адрес клиента изменяется, временами возникают проблемы с сессиями и кэшированием.
Пример
Давайте посмотрим, как можно разрешить подобную ситуацию на примере конфигурации с Apache и Tomcat.
-
Мониторинг подключений: Используйте модуль
mod_status
для мониторинга текущих подключений к вашему серверу. Этот модуль предоставляет интерфейс для отслеживания состояния сервера и помогает определить, достигает ли сервер пределов своей загрузки. -
Оптимизация настроек Apache: В данном случае важно убедиться, что параметры конфигурации Apache, такие как
MaxClients
,ServerLimit
иKeepAlive
, настроены оптимально для вашей среды. УвеличьтеMaxClients
, если сервер часто достигает максимального количества подключений. -
Конфигурация прокси: Проверьте корректность настроек
ProxyPass
иProxyPassReverse
. Необходимо убедиться, что все проксированные запросы корректно направляются и возвращают ответы. -
Сетевая конфигурация: На уровне сети удостоверьтесь, что проблемы не вызваны сетевыми правилами или брандмауэром. Проверьте, есть ли ограничения у вашего провайдера или в облачной инфраструктуре (например, в том же AWS, удостоверьтесь, что IP настроены как "Elastic IPs").
-
Проверка журнала ошибок: Учитывая, что LogLevel установлен в режим
debug
, проверьте файлы журналов для более детального анализа любых скрытых ошибок. -
Тестирование в различных браузерах: Проблема может зависеть от сторонних факторов, таких как конкретный браузер. Для диагностики попробуйте открыть страницу в других браузерах.
Применение
Применив описанные шаги на практике, начните с мониторинга соединений с помощью mod_status
и анализа его вывода. Это поможет определить, насколько загружен ваш сервер и имеет ли он ресурсы для обработки текущих соединений.
Проанализируйте и при необходимости оптимизируйте настройки конфигурационных файлов Apache, такие как apache2.conf
, proxy.conf
и reqtimeout.conf
, для улучшения производительности и быстродействия.
Затем при необходимости пересмотрите конфигурацию сетевого оборудования и брандмауэра, чтобы быть уверенными в отсутствии проблем с сетью.
Если проблема не решена, рассмотрите тестирование приложения на других системах и инфраструктурах для выяснения возможной зависимой от окружения проблемы.
В итоге, систематическое следование указанным шагам должно помочь локализовать и устранить причину проблемы "net::ERR_CONNECTION_TIMED_OUT", обеспечив стабильную работу вашего веб-сервера и приложений.