Я несколько раз слышал, что не следует предоставлять веб-приложение Java напрямую внешнему миру с сервера Tomcat, на котором оно работает. Скорее, между ними должен быть обычный веб-сервер - например, Apache. Почему это?
Задав недавно этот вопрос моему коллеге, веб-разработчику, он сказал, что Tomcat работает намного эффективнее, когда на него обращается только один источник (веб-сервер). Он будет масштабироваться намного дальше. Кроме того, настоящие веб-серверы намного проще настроить для выполнения странных вещей, таких как перезапись URL (очень частая вещь, которую нужно сделать, судя по всем вопросам mod_rewrite, которые мы получаем здесь в SF), контроль доступа и все, что угодно SSL это не так просто, как один сертификат / один сайт.
Основная цель, обычно используемая для сервера Apache, выходящего на Tomcat, - это выгрузить статическое содержимое такие как изображения, HTML, JS, CSS файлы на веб-сервер Apache. На Tomcat передаются только динамические запросы, что снижает трафик особенно. если через брандмауэр.
Смотрите полный список на официальной вики. Зачем мне интегрировать Apache с Tomcat? (или не) который объясняет преимущества безопасности, кластеризации и скорости, однако с новым Tomcat 6 производительность не такая большая проблема, как раньше.
Я не знаю, относится ли этот ответ к Java и Tomcat, но в нашей модели безопасности мы ничего не обслуживаем напрямую в Интернет - у нас есть Apache в DMZ, на котором ReverseProxy запущен для всех наших серверов приложений, в отдельной DMZ (и они подключены к нашим серверам БД в еще одной DMZ.)
Помимо безопасности, это позволяет вам выполнять перенаправления, разгрузку SSL и все другие полезности, которые может делать Apache. Я не знаю, есть ли у Tomcat все эти функции.