Хотя Tomcat прекрасно может работать один, на многих сайтах он прячется за Apache. При этом сервер Apache выполняет одни запросы сам, а другие перенаправляет на сервер Tomcat, который может находиться на том же или на другом компьютере. Этот подход можно использовать, например, для расширения существующего сайта, где используются другие серверные скрипты, такие как CGI или PHP. Он также используется на громоздких сайтах, где за одним клиентом Apache скрывается целое семейство серверов Tomcat. Для взаимодействия Apache и Tomcat могут использоваться два протокола. Первый - AJP (Apache JServ Protocol), это двоичный протокол. Второй - старый добрый HTTP на стороне Apache AJP поддерживается модулем mod_proxy_ajp, а HTTP - модулем mod_proxy_http. Обоим протоколам также необходим модуль mod_proxy.
Для связи пространства имен указанной части адреса Apache с пространством имен сервера Tomcat используется директива Proxy Pass в файле настройки Apache. Для HTTP это может выглядеть так:
ProxyPass /stuff/foo/ http://localhost:8080
После этого локальный запрос к http://example.com/stuff/foo/ bar будет преобразован в прокси запрос http://localhost:8080/ bar-то есть запрос к серверу Tomcat. Чтобы сделать то же самое для протокола AJP, нужна примерно такая директива:
ProxyPass /stuff/foo ajp://localhost:8009
В обоих случаях Apache по сути является обратным прокси. (Я писал о прямом и обратном прокси пару месяцев назад, в LXF170.)
Мы вихрем промчались по довольно сложной теме. Надеюсь, я показал достаточно, чтобы вы смогли написать свою программу “Hello World” в среде Tomcat/Servlet. Но это не все. Далеко не все. Я не рассказывал о кластерах, о балансировке нагрузки и даже о базовой аутентификации пользователей. Иногда мне кажется, что Linux похож на фрактал Мандельброта - как бы глубоко мы ни заходили, всегда можно зайти еще глубже. Я не знаю, что будет в следующем месяце, но будьте уверены - идей у меня предостаточно!