Ошибка mod_proxy_ajp: визуализирует HTML как текст / обычный текст, предлагает пользователю «сохранить как ...» - PullRequest
2 голосов
/ 17 февраля 2011

У нас есть странная, прерывистая ошибка, которая возникает с mod_proxy_ajp, то есть с использованием apache в качестве внешнего интерфейса для сервера tomcat.

Ошибка

  • Пользователь нажимает на ссылку, браузер предлагает пользователю «сохранить как ....» (например, в Firefox «Вы выбрали top open thread.jsp, который является приложением / потоком октетов» ... Что Firefox должен делать с этим файлом)
  • Пользователь говорит "А?"и нажимает «Отмена»
  • Пользователь снова нажимает на ту же ссылку
  • Браузер правильно отображает страницу

Эта ошибка возникает периодически, но, к сожалению, редко на нашем тестовом сервереи часто в работе.

В LiveHttpHeaders Firefox я вижу следующее в приведенном выше примере использования:

  • загрузка первой страницы (т.е. нажмите на ссылку) - это "text / plain"
  • вторая загрузка - "text / html"

Я думал, что проблема может быть связана с ProxyPassReverse (то есть путаница, использовать ли http или ajp), но все эти настройки обратного прохода привели к той же ошибке:

Кроме того, я проверил журналы ошибок apache (настроен на отладку) и не вижу предупреждений или ошибок ...

** Но это работает с mod_proxy_http ??**

Похоже, что переключение на mod_proxy_http решает проблему.Из-за ограниченного тестирования я не смог воссоздать проблему в тестовой среде.

Поскольку проблема временная, я не уверен на 100%, что mod_proxy_http "решает" проблему

Среда

  • Apache 2.2 Windows
  • Jboss 4.2.2 серверная часть (tomcat 6)

Еще одна точка данных

Что бы там ни было, фильтр сервлетов в tomcat распаковывает html перед отправкой в ​​apache.(что означает дополнительную работу, так как apache должен разархивировать, прежде чем он выполнит ProxyPassReverse «найти и заменить»).Я не знаю, если "gzip" испортился.

Вопросы

  • кто-нибудь видел это раньше?
  • Какие инструменты помогают анализироватьпричина?

спасибо

Приложение 1: Вот вывод LiveHttpHeaders

Браузер неправильно видит html как "текст / обычный текст""

http://forums.customer.com/pe/action/forums/displaythread?rootPostID=10842016&channelID=1&portalPageId=1002

GET http://forums.customer.com/pe/action/forums/displaythread?rootPostID=10842016&channelID=1&portalPageId=1002 HTTP/1.1
Host: forums.customer.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Proxy-Connection: keep-alive
Cookie: __utma=156962862.829309431.1260304144.1297956514.1297958674.234; __utmz=156962862.1296760237.232.50.utmcsr=forumstest.customer.com|utmccn=(referral)|utmcmd=referral|utmcct=/pe/action/forums/displaythread; s_vi=[CS]v1|258F5B88051D3FC3-40000105C056085F[CE]; inqVital=xd|0^sesMgr|{"sID":4,"lsts":1292598007}^incMgr|{"id":"755563420055418864","group":"CHAT","ltt":1292598006741,"sid":"755563549194447187","igds":"1290627502757","exempt":false}^inq|{"customerID":"755562378269271622"}^saleMgr|{"state":"UNSOLD","qDat":{},"sDat":{}}; inqState=sLnd|1^Lnd|{"c":4,"flt":1274728016,"lldt":17869990,"pgs":{"201198":{"c":1,"flt":1274728016,"lldt":0},"0":{"c":3,"flt":1274845009,"lldt":17752997}},"pq":["0","0","0","201198"],"fsld":1274728016697}; adv_search_results_page=10; ep_beta=1; visitorID=57307059; JSESSIONID=6jXLNdHRDjR9Th3B5gvTVkw1dZLn1zvhvKLR2r4GTLjylHJgjY3Q!683274050; __utmc=156962862; JSESSIONID=6jXLNdHRDjR9Th3B5gvTVkw1dZLn1zvhvKLR2r4GTLjylHJgjY3Q!683274050; TLTHID=5CCA50304DE99E28DB79A7B3267D4231; TLTSID=9DFCDE8045B374AAB752CC98A30E8311; AreCookiesEnabled=1; s_cc=true; SC_LINKS=%5B%5BB%5D%5D; s_sq=%5B%5BB%5D%5D; __utmb=156962862.64.10.1297958674; memberexists=T; ev1=greywolf%20hdtv%20whmx
Cache-Control: max-age=0

HTTP/1.0 200 OK
Date: Thu, 17 Feb 2011 17:38:42 GMT
Content-Type: text/plain
X-Cache: MISS from samus.company.com
X-Cache-Lookup: MISS from samus.company.com:3128
Via: 1.0 samus.company.com:3128 (squid/2.6.STABLE20)
Proxy-Connection: close
----------------------------------------------------------

Браузер правильно видит html как" text / html "

http://forums.customer.com/pe/action/forums/displaythread?rootPostID=10842016&channelID=1&portalPageId=1002

GET http://forums.customer.com/pe/action/forums/displaythread?rootPostID=10842016&channelID=1&portalPageId=1002 HTTP/1.1
Host: forums.customer.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Proxy-Connection: keep-alive
Cookie: __utma=156962862.829309431.1260304144.1297956514.1297958674.234; __utmz=156962862.1296760237.232.50.utmcsr=forumstest.customer.com|utmccn=(referral)|utmcmd=referral|utmcct=/pe/action/forums/displaythread; s_vi=[CS]v1|258F5B88051D3FC3-40000105C056085F[CE]; inqVital=xd|0^sesMgr|{"sID":4,"lsts":1292598007}^incMgr|{"id":"755563420055418864","group":"CHAT","ltt":1292598006741,"sid":"755563549194447187","igds":"1290627502757","exempt":false}^inq|{"customerID":"755562378269271622"}^saleMgr|{"state":"UNSOLD","qDat":{},"sDat":{}}; inqState=sLnd|1^Lnd|{"c":4,"flt":1274728016,"lldt":17869990,"pgs":{"201198":{"c":1,"flt":1274728016,"lldt":0},"0":{"c":3,"flt":1274845009,"lldt":17752997}},"pq":["0","0","0","201198"],"fsld":1274728016697}; adv_search_results_page=10; ep_beta=1; visitorID=57307059; JSESSIONID=6jXLNdHRDjR9Th3B5gvTVkw1dZLn1zvhvKLR2r4GTLjylHJgjY3Q!683274050; __utmc=156962862; JSESSIONID=6jXLNdHRDjR9Th3B5gvTVkw1dZLn1zvhvKLR2r4GTLjylHJgjY3Q!683274050; TLTHID=5CCA50304DE99E28DB79A7B3267D4231; TLTSID=9DFCDE8045B374AAB752CC98A30E8311; AreCookiesEnabled=1; s_cc=true; SC_LINKS=%5B%5BB%5D%5D; s_sq=%5B%5BB%5D%5D; __utmb=156962862.64.10.1297958674; memberexists=T; ev1=greywolf%20hdtv%20whmx
Cache-Control: max-age=0

HTTP/1.0 200 OK
Date: Thu, 17 Feb 2011 17:38:44 GMT
X-Powered-By: Servlet 2.4; JBoss-4.2.1.GA (build: SVNTag=JBoss_4_2_1_GA date=200707131605)/Tomcat-5.5
Content-Encoding: gzip
Content-Type: text/html;charset=UTF-8
Content-Length: 24739
X-Cache: MISS from samus.company.com
X-Cache-Lookup: MISS from samus.company.com:3128
Via: 1.0 samus.company.com:3128 (squid/2.6.STABLE20)
Proxy-Connection: keep-alive
----------------------------------------------------------

Приложение 2: Дополнительная информация

Браузер получил файл "gzipped".Ранее я нажимал «сохранить как ...», когда произошло несколько таких ошибок.Gunzip успешно обработал файлы и преобразовал их в html.

Ответы [ 6 ]

5 голосов
/ 10 января 2012

Ответ здесь: Как сохранить заголовок Content-Type ответа Tomcat HTTP, отправляемого через соединитель AJP в Apache, используя mod_proxy

установить для DefaultType значение None в конфигурации apache.

# DefaultType: the default MIME type the server will use for a document
# if it cannot otherwise determine one, such as from filename extensions.
# If your server contains mostly text or HTML documents, "text/plain" is
# a good value.  If most of your content is binary, such as applications
# or images, you may want to use "application/octet-stream" instead to
# keep browsers from trying to display binary files as though they are
# text.
#
DefaultType None
0 голосов
/ 21 февраля 2012

Скорее всего, что-то не так с вашим веб-приложением, а не с Apache. Если ваше веб-приложение отправляет обратно правильный тип контента, Apache с радостью перенаправит его клиенту. В этом случае согласование содержимого не будет. Если вы не вернете какой-либо Content-Type, Apache почти наверняка заменит текст / обычный текст, что вам не подходит.

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

0 голосов
/ 27 февраля 2011

Используется, когда apache обслуживает защищенный контент в незащищенном канале.

0 голосов
/ 26 февраля 2011

Я видел следующее в ваших настройках

ProxyPassReverse /ajp://localhost:8080/

Но порт 8080 это не порт ajp.Порт ajp по умолчанию: 8009 .Может ли это быть вашей проблемой?

0 голосов
/ 26 февраля 2011

Похоже на проблему согласования контента. Apache угадывает тип контента, используя «магический» байт, и неправильно устанавливает тип контента. Это объясняет, почему это происходит периодически. Попробуйте отключить mod_negotiation и посмотрите, что произойдет. См. http://httpd.apache.org/docs/2.0/content-negotiation.html для получения дополнительной информации.

0 голосов
/ 17 февраля 2011

Загрузка первой страницы MIME типа "application / octet-stream".Может быть, почтовый поток отправляется обратно в браузер?(Вы можете подтвердить, сохранив файл и заглянув внутрь него.)

Было бы очень полезно опубликовать трассировки запросов / ответов заголовка Live HTTP для проблемных и обычных случаев.Если содержимое в обоих случаях одно и то же - HTML-ответ - может заставить тип mime быть text / html (используя директиву ForceType) для этого конкретного контекста, может решить проблему.

Если это окажетсяв случае, если сжатый контент отправляется в браузер в проблемном случае - тогда необходимо будет копать глубже.Этот браузер специфичен - только для Firefox или для всех браузеров?

Хорошо, основываясь на предоставленной новой информации - похоже, Squid кеширует проблемный ответ и не отправляет правильные заголовки обратно клиенту.Таким образом, браузеры делают правильные вещи здесь - без Content-Encoding и правильного Content-Type они не могут делать больше ничего.

Отсутствуют заголовки ответа для проблемного запроса: X-Powered-By: Servlet 2.4;JBoss-4.2.1.GA (сборка: SVNTag = JBoss_4_2_1_GA date = 200707131605) /Tomcat-5.5 Кодирование содержимого: gzip Тип содержимого: текст / html; кодировка = UTF-8

X-Powered-By: Похоже, проблемные запросы на самом деле не попадают на ваш сервер JBoss.Можете ли вы проверить это, проверив логи доступа?Squid кеширует ответ и затем отправляет его обратно в виде текста / обычного?

Переконфигурирование Squid, чтобы не кэшировать этот конкретный URL, должно помочь - см., Например, http://www.lirmm.fr/doc/Doc/FAQ/FAQ-7.html раздел 7.8 (который относится к Squid 2но более поздние версии должны иметь аналогичные возможности.)

...