Услуги Портфолио Контакты БлогНовости +7 (800) 511‑32‑27 Обсудить проект
Статьи

Руководство по настройке Tomcat

4 декабря 2023·3 мин чтения
Логотип YuSMP Group
Автор материалаРедакция компании YuSMP GroupБлог YuSMP Group
Профиль редакции
Руководство по настройке Tomcat

Коротко. Apache Tomcat — сервер приложений для Java, на котором работает множество enterprise-сервисов. В статье — пошаговая установка на Linux и Windows, настройка server.xml, портов и памяти (JAVA_OPTS/CATALINA_OPTS), пользователей и SSL, автозапуск через systemd, оптимизация и разбор частых ошибок конфигурации.

Apache Tomcat — это сервер приложений с открытым исходным кодом для Java: на нём разворачивают сервлеты и JSP-страницы, тестируют код и запускают в проде enterprise-приложения. Ниже разберём, как правильно настроить Tomcat — от установки до автозапуска и защиты сервера.

Tomcat — распространённый инструмент среди веб-разработчиков на Java. Программное обеспечение имитирует работу полноценного веб-сервера: поддерживает сессии, взаимодействие с клиентом и обработку HTTP-запросов, поэтому на нём удобно разворачивать и тестовые стенды, и промышленные сервисы.

Tomcat остаётся одним из самых популярных серверов приложений для Java: проект развивается более 25 лет, а сфера применения — от учебных pet-проектов до банковских и государственных систем.

Основные настройки

Их разместили в файле server.xml. Для внесения изменений обычно необходимо его редактировать. Все настройки Tomcat можно разделить на основные категории:

  • глобальные;
  • верхнеуровневые;
  • встраиваемые компоненты;
  • контейнеры;
  • соединители.

Кратко расскажем о настройках и их возможностях.

Основные элементы

Эти компоненты играют главную роль при настройке системы. Всего их три.

  • Catalina — отвечает за развертывание программы в определенном контейнере. Ее можно считать отдельным контейнером сервлетов, размещенным внутри самого Tomcat.
  • Coyote — его задача заключается в прослушивании запросов вида HTTP, их анализе, передаче на обработку и отправлении ответов. По сути, именно этот компонент отвечает за имитацию функции веб-сервера.
  • Jasper — необходим для применения технологии JSP. Она дает возможность размещать внутри страницы различные данные по тому же принципу, что и в HTML-файлах. Можно сказать, что этот компонент перерабатывает джава-код в HTML.
Серверная инфраструктура для Java-приложений на Apache Tomcat
Развёртывание и поддержка Java-приложений на заказ
Узнайте цену

Верхнеуровневые элементы

К ним относятся две сущности:

  • Сервер — это основа программы. В нем хранят элементы конфигурации. Также серверу можно задать атрибуты для портов. Например, можно настроить командную строку для определенного порта, чтобы отключать его.
  • Сервис — его размещают на сервере. Основная задача — связывать воедино все помещенные в него компоненты. Пользователю необходимо задать его имя через атрибут.

Соединители

Их нужно поместить в сервис, чтобы запросы с портов уходили в один общий компонент. В Tomcat есть два вида соединителей или коннекторов.

  • AJP — работает для связи с одноименным протоколом. За счет его реализации Tomcat может интегрироваться в Апач.
  • HTTP — предоставляет функциональность полноценного веб-сервера. При его настройке можно задать треды для управления запросами и дать возможность выполнять сервлеты.

Типовой HTTP-коннектор в conf/server.xml выглядит так:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

Атрибут port задаёт порт прослушивания, connectionTimeout — максимальное время ожидания запроса в миллисекундах, а redirectPort указывает, на какой порт перенаправлять запросы, требующие защищённого соединения.

Установка Tomcat: пошаговая инструкция

Перед установкой стоит учитывать версию продукта: Tomcat 10 и 11 перешли на пространство имён Jakarta EE (jakarta.servlet вместо javax.servlet) и требуют Java 17+, тогда как Tomcat 9 совместим с более старыми Java-приложениями на javax.* и работает начиная с Java 8. Выбирайте версию исходя из того, под какое пространство имён написано ваше приложение.

  1. Проверьте установленную Java: java -version. Без совместимой JRE/JDK запускать Tomcat бессмысленно.
  2. Скачайте дистрибутив с официального сайта tomcat.apache.org — под Linux это tar.gz, под Windows — zip-архив.
  3. Распакуйте архив в целевую директорию, например:
    tar -xzf apache-tomcat-*.tar.gz -C /opt/tomcat --strip-components=1
  4. Дайте права на исполнение скриптам в Linux: chmod +x /opt/tomcat/bin/*.sh.
  5. Запустите сервер: bin/startup.sh на Linux или bin/startup.bat на Windows.
  6. Проверьте работоспособность по адресу http://localhost:8080 — должна открыться стартовая страница Tomcat. Остановить сервер можно командой bin/shutdown.sh (shutdown.bat на Windows).

Настройка порта в server.xml

Если порт 8080 уже занят другим сервисом или закрыт политикой безопасности, его меняют в том же элементе Connector. Например, чтобы Tomcat слушал 8081, достаточно поменять значение атрибута:

<Connector port="8081" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

После правки server.xml сервер нужно перезапустить (shutdown.sh, затем startup.sh), чтобы изменения вступили в силу. Не забудьте открыть новый порт в файрволе, если Tomcat принимает внешние запросы напрямую, а не через reverse-proxy.

Настройка памяти: JAVA_OPTS и CATALINA_OPTS

По умолчанию Tomcat запускается с настройками памяти JVM «из коробки», которых часто не хватает под нагрузку. Задать лимиты можно через переменные окружения в файле bin/setenv.sh (создайте его, если отсутствует):

CATALINA_OPTS="-Xms512m -Xmx2048m -XX:MaxMetaspaceSize=256m -server"

JAVA_OPTS и CATALINA_OPTS — не одно и то же: JAVA_OPTS применяются и к самой JVM, и к служебным скриптам управления (startup, shutdown, version), а CATALINA_OPTS влияют только на процесс запущенного сервера. Именно поэтому настройки памяти принято задавать через CATALINA_OPTS — так они не затрагивают вспомогательные утилиты.

ФлагНазначение
-XmsНачальный размер кучи JVM — сколько памяти резервируется сразу при старте
-XmxМаксимальный размер кучи — сервер не сможет выделить больше этого значения
-XX:MaxMetaspaceSizeЛимит памяти под метаданные классов, отдельно от кучи
-serverВключает серверный режим JIT-компиляции JVM — эффективнее для долгоживущих процессов

Пользователи и роли: tomcat-users.xml

Доступ к веб-панели Tomcat Manager и удалённому развёртыванию приложений настраивают в файле conf/tomcat-users.xml. Пример добавления пользователя с правами администратора:

<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="admin" password="сложный-пароль" roles="manager-gui,admin-gui"/>

Основные роли: manager-gui — доступ к веб-интерфейсу менеджера, manager-script — управление через HTTP-запросы (используется в CI/CD), admin-gui — доступ к административной консоли хоста. Задавайте сложные пароли и не оставляйте дефолтные учётные записи из примеров документации — это одна из самых частых причин взлома серверов на Tomcat.

Автозапуск Tomcat как systemd-сервис (Linux)

Чтобы Tomcat поднимался автоматически после перезагрузки сервера, создайте unit-файл /etc/systemd/system/tomcat.service:

[Unit]
Description=Apache Tomcat
After=network.target

[Service]
Type=simple
User=tomcat
Environment=CATALINA_HOME=/opt/tomcat
ExecStart=/opt/tomcat/bin/catalina.sh run
ExecStop=/opt/tomcat/bin/shutdown.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target

Дальше — стандартные команды systemd:

systemctl daemon-reload
systemctl enable tomcat
systemctl start tomcat
systemctl status tomcat

Обратите внимание: сервис запускается от отдельного пользователя tomcat, а не от root — так при компрометации веб-приложения злоумышленник не получит полный доступ к системе.

Настройка автозапуска Tomcat через systemd на Linux-сервере

SSL-сертификат для Tomcat

Есть два рабочих способа включить HTTPS. Первый — терминировать TLS на самом Tomcat: сгенерировать хранилище ключей командой keytool -genkey -alias tomcat -keyalg RSA -keystore keystore.jks и добавить в server.xml защищённый коннектор:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
           keystoreFile="/opt/tomcat/conf/keystore.jks"
           keystorePass="пароль-хранилища" clientAuth="false" sslProtocol="TLS" />

Второй, более распространённый на практике способ — вынести терминацию TLS на reverse-proxy (Nginx или Apache HTTPD) перед Tomcat, а сам сервер приложений держать в закрытом контуре на HTTP. Это упрощает продление сертификатов (например, через Let's Encrypt) и не требует хранить приватные ключи внутри Java-процесса.

Развёртывание приложения

Когда система установит Tomcat, проверьте сервер на работоспособность через стартовую страницу по адресу http://localhost:8080. Стандартный проект под Tomcat имеет типовую структуру:

  • файл src — в нем находятся исходные данные;
  • в папке web есть файл web.xml — с инструкциями по развёртыванию;
  • в ней же находится index.jsp — главная страница веб-приложения.

Чтобы запустить готовый проект в Tomcat, его нужно собрать в war-файл — именно в нём хранятся все данные о проекте. В IDE (например, IntelliJ IDEA) это делается через вкладку «Артефакты»: создаётся манифест «Веб-приложение: архив», указывается путь к папке проекта, а затем во вкладке «Сборка» → «Сборка артефактов» выбирается нужная конфигурация — на выходе получится war-файл в директории out.

Есть и способ без IDE — собрать war-архив вручную из командной строки и просто скопировать его в папку автодеплоя:

jar -cvf myapp.war -C build/ .
cp myapp.war /opt/tomcat/webapps/

По умолчанию у Tomcat включён autoDeploy — сервер сам распакует war-файл и развернёт приложение в течение нескольких секунд, без перезапуска.

Оптимизация производительности и типичные ошибки

  • Настройте пул потоков. Атрибуты maxThreads и acceptCount у коннектора определяют, сколько запросов сервер обработает параллельно и сколько поставит в очередь — значения по умолчанию рассчитаны на лёгкую нагрузку и редко подходят для прод-трафика.
  • Отключите AJP-коннектор, если он не используется. Уязвимость Ghostcat (CVE-2020-1938) как раз эксплуатировала открытый наружу AJP-порт 8009 — если интеграция с Apache HTTPD не нужна, коннектор лучше закомментировать в server.xml.
  • Не запускайте процесс от root. Отдельный системный пользователь ограничивает ущерб при компрометации приложения (см. пример systemd-юнита выше).
  • Включите сжатие ответов. Атрибут compression="on" у HTTP-коннектора снижает объём трафика для текстовых ответов почти без нагрузки на CPU.
  • Настройте ротацию логов. Файл logs/catalina.out растёт без ограничений — подключите logrotate или встроенный ClassLoaderLogManager с ежедневной ротацией.
  • Мониторьте JVM через JMX. Метрики кучи, GC и числа потоков помогают поймать утечки памяти до того, как они уронят сервис.

Частые вопросы

Чем Tomcat отличается от полноценного сервера приложений вроде WildFly или GlassFish?
Tomcat — облегчённый контейнер сервлетов: он реализует только веб-профиль Jakarta EE (Servlet, JSP, WebSocket). WildFly и GlassFish — полноценные EE-серверы с EJB, JMS и JTA «из коробки». Для большинства веб-приложений возможностей Tomcat достаточно, а поддерживать его проще и дешевле.

Какой порт использует Tomcat по умолчанию?
По умолчанию Tomcat слушает порт 8080 для HTTP-соединений и порт 8009 для AJP. Оба порта задаются атрибутом port у элемента Connector в файле conf/server.xml и их можно изменить на любые свободные.

Как проверить, что Tomcat запущен и работает?
Откройте в браузере http://localhost:8080 — должна показаться стартовая страница Tomcat. На сервере без графического интерфейса используйте systemctl status tomcat (если сервис настроен через systemd) или ps aux | grep tomcat, чтобы убедиться, что процесс запущен.

Нужно ли открывать панель Tomcat Manager наружу?
Нет. Веб-панель /manager стоит ограничивать доступом только с localhost или через VPN: открытый наружу менеджер с дефолтными или слабыми учётными данными — одна из самых частых причин взлома серверов на Tomcat.

Чем отличаются переменные JAVA_OPTS и CATALINA_OPTS?
JAVA_OPTS применяются и к самой JVM, и к служебным скриптам управления Tomcat (startup, shutdown), а CATALINA_OPTS действуют только на процесс запущенного сервера. Настройки памяти -Xms и -Xmx принято задавать именно через CATALINA_OPTS, чтобы не затронуть вспомогательные утилиты.

Можно ли развернуть Tomcat в Docker?
Да, официальный образ tomcat на Docker Hub — стандартный способ запуска в контейнерных средах. Файлы конфигурации (server.xml, tomcat-users.xml) и war-архивы приложения подключаются через volumes либо собираются в собственный Docker-образ поверх базового.

Нужны разработчики в команду?

Подберём инженеров нужного стека под ваш проект — быстрый старт.

Обсудить команду