Как Apache httpd и Tomcat работают вместе? - PullRequest
14 голосов
/ 20 марта 2012

Я унаследовал проект, включающий веб-приложение на Java, бэкэнд которого работает на основе Apache httpd / Tomcat. Веб-сервер используется для обслуживания JS, статического содержимого и для общей балансировки нагрузки, а Tomcat обслуживает обратно JSP через один файл WAR.

Я получу доступ к базе кода позже сегодня или завтра, но хотел бы попытаться провести некоторое исследование заранее.

Мой вопрос можно сформулировать так: Как эти двое работают вместе?

  • Кто первым получает HTTP-запросы?
  • Как httpd узнает, когда перенаправлять запросы JSP на Tomcat или просто отвечать на сам запрос?
  • Как httpd "передает" запрос и "получает" ответ от Tomcat? Это просто "копирование-вставка" запроса / ответа на порт, который прослушивает Tomcat? Происходит ли какое-то межпроцессное взаимодействие на уровне ОС? И т.д.

Это всего лишь общие вопросы о том, как технологии взаимодействуют друг с другом. Заранее спасибо!

1 Ответ

19 голосов
/ 20 марта 2012

Кто первым получает HTTP-запросы?

Apache, почти наверняка.Однако могут существовать процессы администрирования, которые общаются напрямую с Tomcat.

Как httpd узнает, когда перенаправлять запросы JSP на Tomcat или просто отвечать на сам запрос?

Из его конфигурации.Специфика будет отличаться.Например, он может использовать mod_jk или mod_jk2, и в этом случае вы найдете директивы JkMount в файлах конфигурации, например:

JkMount /*.jsp ajp13_worker

..., которая сообщаетпередать запросы в корень сайта для файлов, соответствующих *.jsp и ajp13_worker, что определено в файле workers.properties.

Или это может быть настроено в простом HTTP обратный прокси расположение.Или что-то еще.

Как httpd "передает" запрос и "получает" ответ от Tomcat?

Это зависит от конфигурации;это может быть HTTP, AJP или другой модуль.

Это просто "копирование-вставка" запроса / ответа на запроспорт Tomcat прослушивает?

Вроде.:-) См. Ссылку обратного прокси выше.

Существует ли какая-то межпроцессная связь на уровне ОС?

Да.AFAIK, все это основано на сокетах (а не, скажем, на разделяемой памяти), что означает (помимо прочего), что Tomcat и Apache не должны работать на одной машине.

...