как исправить apache2 "proxy_http: error" AH01102: ошибка чтения строки состояния с удаленного сервера localhost: 4382.
У меня есть веб-сервер apache2, который используется для обслуживания нескольких приложений nodejs в бэкэнде.
Версия веб-сервера Apache2: Версия сервера: Apache / 2.4.41 (Ubuntu) Сервер построен: 2019-08-21T20: 43: 05
Версия Nodejs: v10.18.1
Версия Mongo db: v4.0.15
Мы были поражены этой ошибкой / ошибками (см. Журналы) во всех наших серверных приложениях "proxy_http: error" AH01102: ошибка чтения строки состояния с удаленного сервера localhost: 4382.
[Mon Apr 27 20:09:05.697271 2020] [proxy_http:error] [pid 26792:tid 140063099688704] (70007)The timeout specified has expired: [client 178.153.198.97:52385] AH01095: prefetch request body failed to 127.0.0.1:4381 (localhost) from 178.153.198.97 (), referer: https://www.example.com/sub-admin/menus/add-menu
[Mon Apr 27 20:21:51.617095 2020] [proxy_http:error] [pid 26764:tid 140062901626624] (104)Connection reset by peer: [client 178.153.195.206:61268] AH01102: error reading status line from remote server localhost:4382, referer: http://www.example.com/restaurant/dashboard
[Mon Apr 27 20:21:51.617117 2020] [proxy:error] [pid 26764:tid 140062901626624] [client 178.153.195.206:61268] AH00898: Error reading from remote server returned by /restaurant/assets/img/avatars/5.jpg, referer: http://www.example.com/restaurant/dashboard
[Tue Apr 28 03:51:28.498423 2020] [proxy_http:error] [pid 26793:tid 140062868055808] (104)Connection reset by peer: [client 89.211.117.185:57622] AH01102: error reading status line from remote server localhost:4382, referer: http://www.example.com/restaurant/dashboard
[Tue Apr 28 03:51:28.498455 2020] [proxy:error] [pid 26793:tid 140062868055808] [client 89.211.117.185:57622] AH00898: Error reading from remote server returned by /restaurant/static/css/main.f8d32764.chunk.css, referer: http://www.example.com/restaurant/dashboard
До сих пор я пробовал эти вещи, чтобы исправить эту ошибку.
ProxyPreserveHost On - Не сработало.
disablereuse = включено. Это не сработало.
Тайм-аут = 600, затем Тайм-аут = 900. Не сработало.
повторная попытка = 1 получение = 3000 тайм-аут = 600 Поддержка активности = Вкл. Не сработало.
SetEnv force-proxy-request-1.0 1
SetEnv прокси-nokeepalive 1
Работали недолго (12 часов). Опять же, та же ошибка воспроизводится почти с той же частотой, что и раньше.
Этот работал 24 часа. Затем через 24 часа эта ошибка была воспроизведена. Хотя на этот раз через 24 часа ошибка возникает только один раз в час, иногда только раз в два часа, иногда раз в два-пять часов.
1 кв. Прежде всего, почему происходит эта ошибка.
2кв. Эта ошибка возникает только из-за приложения apache или nodejs, также может быть виновником
(Но при возникновении этой ошибки apache почти нет журналов ошибок приложения).
3кв. Как / Каков наилучший способ идентифицировать, диагностировать и устранить эту ошибку, потому что после поиска на различных форумах никто, похоже, не решил эту ошибку идеально или не нашел на нее правильного ответа, и это было так с 2006 года, глядя на некоторых форумах.
Вот мой файл конфигурации apache
<VirtualHost *:443>
ServerAdmin root@example.com
ServerName www.example.com
ServerAlias example.com
SSLEngine On
SSLProxyEngine On
SSLCertificateFile "/etc/ssl/private/server.crt"
SSLCertificateKeyFile "/etc/ssl/private/server.key"
ProxyRequests Off
#Admin
ProxyPass /admin http://localhost:4380/
ProxyPassReverse /admin http://localhost:4380/
SetEnv proxy-nokeepalive 1
SetEnv proxy-initial-not-pooled 1
ProxyPass /restaurant http://localhost:4382/
ProxyPassReverse /restaurant http://localhost:4382/
SetEnv proxy-nokeepalive 1
SetEnv proxy-initial-not-pooled 1
ProxyPass /sub-admin http://localhost:4385/
ProxyPassReverse /sub-admin http://localhost:4385/
SetEnv proxy-nokeepalive 1
SetEnv proxy-initial-not-pooled 1
#API
ProxyPass /admin-api/ http://localhost:4381/
ProxyPassReverse /admin-api/ http://localhost:4381/
SetEnv proxy-nokeepalive 1
SetEnv proxy-initial-not-pooled 1
ProxyPass /restaurant-api/ http://localhost:4379/
ProxyPassReverse /restaurant-api/ http://localhost:4379/
SetEnv proxy-nokeepalive 1
SetEnv proxy-initial-not-pooled 1
</VirtualHost>
Если вы посмотрите свой журнал, сначала появится (70007) Указанный тайм-аут истек: [клиент 178.153.198.97:52385] AH01095 остальная часть журнала является своего рода следствием этого.
Здесь происходит то, что вашей реализации localhost требуется много времени, чтобы вернуть ответ. Возможно, вы сможете проверить в своей реализации, почему это так, и попытаться оптимизировать его. Но в apache вы можете определить время подключения и тайм-аут для ожидания реализации localhost.
ProxyPass / ресторан http: // localhost: 4382 / connectiontimeout =[время в секундах] тайм-аут =[время в секундах [
например 60 секунд (1 мин)
ProxyPass / ресторан http: // localhost: 4382 / connectiontimeout = 60 timeout = 60