Конфигурация Tomcat — пошаговое руководство

Как только вы запустили Tomcat на своем сервере, следующим шагом будет настройка его основных параметров. Процесс начальной настройки будет состоять из двух задач, которые подробно описаны в этой статье. Первая — это редактирование XML файлов конфигурации Tomcat, а вторая — определение соответствующих переменных окружения.

Конфигурационные файлы XML

Два наиболее важных конфигурационных файла для запуска Tomcat называются server.xml и web.xml. По умолчанию эти файлы расположены по адресам TOMCAT-HOME/conf/server.xml и TOMCAT-HOME/conf/web.xml, соответственно.

Не делайте одну и ту же работу по настройке дважды. Попробуйте Tcat — профили сервера позволяют сохранять общие конфигурации и применять их к нескольким экземплярам Tomcat одним щелчком мыши.

SERVER.XML

Файл server.xml является основным конфигурационным файлом Tomcat и отвечает за определение начальной конфигурации Tomcat при запуске, а также определяет способ и порядок загрузки и сборки Tomcat. Элементы файла server.xml относятся к пяти основным категориям — Элементы верхнего уровня, Коннекторы, Контейнеры, Вложенные компоненты и Глобальные настройки. Все элементы в этих категориях имеют множество атрибутов, которые можно использовать для тонкой настройки их функциональности. Чаще всего, если вам нужно внести какие-либо серьезные изменения в установку Tomcat, например, указать номера портов приложений, файл server.xml является тем файлом, который нужно редактировать.

Вы можете найти полную документацию по этим параметрам на страницах документации Apache по Tomcat, но здесь приведена информация о некоторых наиболее важных элементах, чтобы вы могли начать работу с конфигурацией!

Элементы верхнего уровня

Сервер

Этот элемент определяет один сервер Tomcat и содержит элементы конфигурации Logger и ContextManager. Кроме того, элемент Server поддерживает атрибуты «port», «shutdown» и «className».

Атрибут port используется для указания порта, который Tomcat должен прослушивать для команд выключения. Атрибут shutdown определяет командную строку, которую нужно прослушать на указанном порту, чтобы инициировать выключение. Атрибут className определяет, какая реализация класса Java должна быть использована.

Сервис

Этот элемент, который может быть вложен в элемент Server, используется для содержания одного или нескольких компонентов Connector, которые совместно используют один и тот же компонент Engine. Основная функция этого компонента заключается в определении этих компонентов как единой службы. Имя службы, которое будет отображаться в журналах, задается с помощью атрибута «name» элемента Service.

Коннекторы

Вкладывая один коннектор (или несколько коннекторов) в тег Service, вы позволяете Catalina направлять запросы с этих портов на обработку одному компоненту Engine. Tomcat позволяет вам определять HTTP и AJP коннекторы.

HTTP-коннектор

Этот элемент представляет собой HTTP/1.1 Connector и обеспечивает Catalina функциональность автономного веб-сервера. Это означает, что в дополнение к выполнению сервлетов и JSP страниц, Catalina может прослушивать определенные TCP порты для запросов. Каждый определенный вами коннектор представляет собой один TCP-порт, который Catalina должна прослушивать для HTTP-запросов. При настройке HTTP-коннекторов обратите внимание на атрибуты «minSpareThreads», «maxThreads» и «acceptCount». Атрибут «maxThreads» имеет особое значение. Этот атрибут контролирует максимальное количество потоков, которые могут быть созданы для обработки запросов, превышающих количество доступных потоков. Слишком низкое значение приведет к тому, что запросы будут накапливаться в серверном сокете, который начнет отказывать в соединениях, как только он будет заполнен. Всестороннее тестирование поможет вам избежать этой проблемы.

AJP-коннектор

Этот элемент представляет собой коннектор, способный взаимодействовать с протоколом AJP. Основная роль этого элемента заключается в том, чтобы помочь Tomcat интегрироваться с установкой Apache. Наиболее распространенная причина, по которой вам нужна эта функциональность, это если вы планируете использовать Apache для обслуживания статического контента перед Tomcat. Эта техника призвана высвободить больше мощности для динамической генерации страниц и балансировки нагрузки, поэтому, если для вашего приложения важна высокая производительность, это стоит рассмотреть. AJP Connectors также могут быть использованы для передачи функций обработки SSL от Apache к Tomcat.

Контейнеры

Эти элементы используются Catalina для направления запросов на нужный аппарат обработки.

Контекст

Этот элемент представляет одно веб-приложение и содержит информацию о пути для направления запросов к соответствующим ресурсам приложения. Когда Catalina получает запрос, она пытается сопоставить самый длинный URI с контекстным путем данного Context, пока не найдет нужный элемент для обслуживания запроса. Элемент Context может иметь максимум один вложенный экземпляр на элемент полезных элементов Loader, Manager, Realm, Resources и WatchedResource. Хотя Tomcat позволяет вам определять Contexts в «TOMCAT-HOME/conf/server.xml», этого следует избегать, поскольку эти центральные настройки конфигурации не могут быть перезагружены без перезапуска Tomcat, что делает редактирование атрибутов Context более инвазивным, чем необходимо.

Engine

Этот элемент используется в сочетании с одним или несколькими коннекторами, вложенными в элемент Service, и отвечает за обработку всех запросов, связанных с родительской службой. Элемент Engine может использоваться только в том случае, если он вложен в элемент Service, и только один элемент Engine разрешен в данном элементе Service. Обратите внимание на атрибут «defaultHost», который определяет элемент Host, отвечающий за обслуживание запросов к именам хостов на сервере, которые не настроены в server.xml. Этот атрибут должен совпадать с именем одного из элементов Host, вложенных в рассматриваемый элемент Engine. Также важно присвоить уникальное логическое имя каждому из элементов Engine, используя атрибут «name». Если один элемент Server в вашем файле server.xml включает несколько элементов Service, вы должны присвоить уникальное имя каждому элементу Engine.

Host

Этот элемент, который вложен внутрь элемента Engine, используется для связывания сетевых имен серверов с серверами Catalina. Этот элемент будет работать правильно только в том случае, если данный виртуальный хост зарегистрирован в управляющем DNS данного домена.

Одной из наиболее полезных особенностей элемента Host является его способность содержать вложенные элементы Alias, которые используются для определения нескольких сетевых имен, которые должны разрешаться в один и тот же виртуальный хост.

Кластер

Элемент Cluster используется Tomcat для обеспечения репликации атрибутов контекста, развертывания WAR и репликации сессий, и может быть вложен в элемент Engine или Host. Внутри него вложены элементы Manager, Channel, Valve, Deployer и ClusterListener. Более подробную информацию об этих элементах и их использовании можно найти на странице Apache’s Tomcat Configuration. Хотя этот элемент является очень настраиваемым, конфигурации по умолчанию обычно достаточно для удовлетворения потребностей большинства пользователей.

Вложенные компоненты

Эти элементы вложены внутрь элементов контейнера для определения дополнительных функциональных возможностей.

Слушатели

Эти элементы, которые могут быть вложены в элементы Server, Engine, Host или Context, указывают на компонент, который будет выполнять действие при возникновении определенного события.

В то время как большинство компонентов имеют атрибут className для выбора различных реализаций элемента, элемент Listener уникален тем, что существует несколько уникальных реализаций, кроме стандартной, и, начиная с Tomcat 6.0, все эти реализации требуют, чтобы элемент Listener был вложен в элемент Server. Таким образом, правильная установка этого атрибута очень важна. В настоящее время доступны следующие реализации: APR Lifecycle Listener, Jasper Listener, Server Lifecycle Listener, Global Resources Lifecycle Listener, JMX Remote Lifecycle Listener и JRE Memory Leak Prevention Listener.

Глобальные ресурсы именования

Этот элемент используется для указания глобальных ресурсов Java Naming and Directory Interface (JNDI) для конкретного сервера, отличных от любых контекстов JNDI для каждого веб-приложения. При желании вы можете объявить характеристики поиска ресурсов JNDI для <resource-ref> и <resource-env-ref> внутри этого элемента, определив их и связав с ними с помощью <ResourceLink>. Результаты этого метода эквивалентны включению элементов <resource-ref> в файл приложения «/WEB-INF/web.xml». При использовании этого метода обязательно определите все дополнительные параметры, необходимые для задания и настройки фабрики объектов и ее свойств.

Realm

Этот элемент, который может быть вложен в любой элемент Container, определяет базу данных, содержащую имена пользователей, пароли и роли для этого Container. Если он вложен в элемент Host или Engine, характеристики, определенные в элементе Realm, наследуются всеми контейнерами нижнего уровня по умолчанию. Важно правильно задать атрибут «className» этого элемента, поскольку существует множество реализаций, обеспечивающих различные типы безопасности, управляемой контейнером. Эти реализации используются для обеспечения взаимодействия Catalina с другими системами управления безопасностью пользователей, такими как JDBC, JNDI и DataSource.

Ресурсы

Этот элемент выполняет одну простую задачу — направляет Catalina к статическим ресурсам, используемым вашими веб-приложениями. Эти ресурсы включают классы, HTML и JSP файлы. Использование этого элемента позволяет Catalina получить доступ к файлам, содержащимся не в файловой системе, а в других местах, например, к ресурсам, содержащимся в архивах WAR или базах данных JDBC. Важно помнить, что эта техника предоставления веб-приложениям доступа к ресурсам, содержащимся вне файловой системы, может использоваться только в том случае, если рассматриваемое приложение не требует прямого доступа к ресурсам, хранящимся в файловой системе.

Valve

Компоненты Valve вложены в элементы Engine, Host и Context для вставки определенных функциональных возможностей в конвейер обработки запросов. Это очень универсальный элемент. Типы элементов Valve варьируются от аутентификаторов до фильтров и исправления ошибок WebDAV. Многие из этих типов клапанов могут быть вложены только в определенные элементы. Излишне говорить, что внимание к атрибуту «className» этого элемента крайне важно. Обширная документация по типам элементов Valve и их использованию доступна на странице Apache’s Tomcat Configuration.

Web.XML

Файл web.xml заимствован из спецификации сервлетов и содержит информацию, используемую для развертывания и настройки компонентов ваших веб-приложений. При первой настройке Tomcat вы можете определить сопоставления сервлетов для центральных компонентов, таких как JSP. В Tomcat этот файл функционирует так же, как описано в спецификации сервлетов. Единственным отличием в работе Tomcat с этим файлом является то, что у пользователя есть возможность использовать TOMCAT-HOME/conf/web.xml для определения значений по умолчанию для всех контекстов. При использовании этого метода Tomcat будет использовать TOMCAT-HOME/conf/web.xml в качестве базовой конфигурации, которая может быть перезаписана специфическими для приложения файлами WEB-INF/web.xml.

Другие важные файлы конфигурации

Несколько других конфигурационных файлов будут важны, когда вы впервые запустите Tomcat. Списки ролей, пользователей и паролей по умолчанию, которые UserDatabaseRealm Tomcat будет использовать для аутентификации, можно найти в tomcat-users.xml. Если вы хотите получить доступ к любым административным инструментам, которые поставляются вместе с Tomcat, вы можете отредактировать этот файл, чтобы добавить доступ администратора и менеджера. Настройки контекста по умолчанию, применяемые ко всем развернутым контекстам вашей установки Tomcat, можно настроить в файле context.xml. Файл catalina.policy, который заменяет файл java.policy, упакованный с выбранным вами JDK, содержит настройки разрешений для элементов Tomcat. Вы можете редактировать этот файл вручную или с помощью policytool, приложения, поставляемого с любым дистрибутивом Java версии 1.2 или более поздней.

Переменные среды

Наконец, при первой настройке Tomcat есть несколько переменных окружения, которые необходимо изменить в соответствии с вашими потребностями.

JAVA_OPTS

Используя эту переменную, вы можете определить размер кучи JVM. Установка соответствующего значения для этой переменной имеет решающее значение при развертывании нового приложения, которому для нормальной работы может потребоваться больший или меньший размер кучи. Нахождение правильных значений для этих параметров может помочь устранить или уменьшить количество сообщений OOME.

CATALINA_HOME

Эта переменная определяет местоположение вашей установки Tomcat. Сценарии запуска Tomcat будут пытаться определить значение этой переменной, но во избежание проблем лучше просто установить правильное значение самостоятельно.

CATALINA_OPTS

Эта переменная используется для установки различных опций, специфичных для Tomcat. Эта переменная может быть использована для установки переменных окружения, которые отменяют настройки JAVA_OPTS только для Tomcat, что полезно, если вы запускаете несколько Java-приложений на одной JVM.