Подтвердить что ты не робот

Как Apache httpd и Tomcat работают вместе?

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

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

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

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

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

4b9b3361

Ответ 1

Кто первым получает 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, или он может использовать какой-либо другой модуль.

Это просто "copy-n-paste" запрос/ответ на порт, который прослушивает Tomcat?

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

Есть ли какая-то связь между процессами на уровне OS?

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