Недопустимый шлюз 502 ошибки с Apache mod_proxy и Tomcat

С System.Data.OleDb параметры строго positional . OleDb игнорирует имена параметров и обращает внимание только на порядок, в котором помещики параметров появляются в CommandText. Поэтому вам нужно .Add или .AddWithValue параметры точно в том же порядке, что они появляются в CommandText.

В вашем случае вам нужно отменить порядок последних двух dbCommand.Parameters.AddWithValue операторов : @Address_ID должен быть последним добавленным параметром, потому что его заполнитель появляется последним в CommandText.

48
задан 2 revs 21 October 2008 в 19:45
поделиться

6 ответов

Так, отвечая на мой собственный вопрос здесь. Мы в конечном счете решили, что видели, что 502 и 503 ошибки в подсистеме балансировки нагрузки из-за Tomcat распараллеливают таймаут. В ближайшей перспективе мы увеличили тайм-аут. В дальнейшей перспективе мы решили проблемы приложения, которые вызывали тайм-ауты во-первых. Почему тайм-ауты Tomcat воспринимались, поскольку 502 и 503 ошибки в подсистеме балансировки нагрузки являются все еще определенной тайной.

13
ответ дан Alex Miller 7 November 2019 в 22:34
поделиться

Я предполагаю Ваше использование mod_proxy_http (или стабилизатор прокси).

Взгляд в Ваших журналах кота (localhost.log или catalina.log) я подозреваю Ваше наблюдение исключения в Вашем веб-стеке, пузырящемся и закрывающем сокет, с которым подключен рабочий кота.

2
ответ дан Dave Cheney 7 November 2019 в 22:34
поделиться

Вы можете использовать proxy-initial-not-pooled

См. http://httpd.apache.org/docs/2.2/mod/mod_proxy_http.html :

Если эта переменная установлена, объединенное соединение не будет повторно используется, если клиентское соединение является начальным. Это позволяет избежать сообщения об ошибке «прокси: ошибка чтения строки состояния с удаленного сервера», вызванного состоянием гонки, когда внутренний сервер закрыл объединенное соединение после проверки соединения прокси-сервером и до того, как данные, отправленные прокси-сервером, достигли серверной части. Следует иметь в виду, что установка этой переменной снижает производительность, особенно с клиентами HTTP / 1.0.

У нас тоже была эта проблема. Мы исправили это, добавив

SetEnv proxy-nokeepalive 1
SetEnv proxy-initial-not-pooled 1

и отключив keepAlive на всех серверах.

mod_proxy_http подходит для большинства сценариев, но мы запускаем его с большой нагрузкой, и у нас все еще есть проблемы с тайм-аутом, которых мы не понимаем.

Но посмотрите, соответствует ли указанная выше директива вашим потребностям.

11
ответ дан 26 November 2019 в 18:53
поделиться

Скорее всего, вам следует увеличить параметр тайм-аута в apache conf (значение по умолчанию 120 секунд)

1
ответ дан 26 November 2019 в 18:53
поделиться

Пример из apache conf:

#Default value is 2 minutes
**Timeout 600**
ProxyRequests off
ProxyPass /app balancer://MyApp stickysession=JSESSIONID lbmethod=bytraffic nofailover=On
ProxyPassReverse /app balancer://MyApp
ProxyTimeout 600
<Proxy balancer://MyApp>
    BalancerMember http://node1:8080/ route=node1 retry=1 max=25 timeout=600
    .........
</Proxy>
3
ответ дан 26 November 2019 в 18:53
поделиться

Просто чтобы добавить некоторые специфические настройки, у меня была аналогичная установка (с обратным проксированием Apache 2.0.63 на Tomcat 5.0.27).

Для некоторых URL серверу Tomcat может потребоваться около 20 минут, чтобы вернуть страницу.

В конечном итоге я изменил следующие настройки в файле конфигурации Apache, чтобы предотвратить истечение тайм-аута при работе прокси-сервера (с большим коэффициентом переполнения на случай, если Tomcat потребовалось больше времени для возврата страницы):

Timeout 5400
ProxyTimeout 5400

Некоторая обратная связь

Одного ProxyTimeout было недостаточно. Глядя на документацию для Тайм-аут , я предполагаю (я не уверен), что это потому, что пока Apache ожидает ответа от Tomcat, между Apache нет трафика и браузер (или любой другой http-клиент) - и поэтому Apache закрывает соединение с браузером.

Я обнаружил, что если я оставлю значение тайм-аута по умолчанию (300 секунд), тогда, если проксируемый запрос к Tomcat займет больше 300 секунд, чтобы получить ответ, браузер отобразит страницу «502 Ошибка прокси». Я считаю, что это сообщение генерируется Apache, зная, что он действует как обратный прокси, прежде чем он закроет соединение с браузером (это мое текущее понимание - оно может быть ошибочным).

На странице ошибки прокси-сервера говорится:

Ошибка прокси

Прокси-сервер получил недопустимый ответ от вышестоящего сервера. Прокси-сервер не может обработать запрос GET .

Причина: Ошибка чтения с удаленного сервера

...что предполагает, что это слишком короткий параметр ProxyTimeout, в то время как исследование показывает, что параметр Apache Timeout (тайм-аут между Apache и клиентом) также влияет на это.

43
ответ дан 26 November 2019 в 18:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: