Установка Apache Tomcat 10 с Nginx в качестве обратного прокси на AlmaLinux 9
О чём эта инструкция
В этой статье подробно показано, как установить Java OpenJDK, развернуть Apache Tomcat 10 в /opt/tomcat, создать systemd‑сервис tomcat10, настроить базовую аутентификацию для Manager/Host Manager и поставить Nginx в качестве обратного прокси. Также приведены подсказки по безопасности, тестам приёмки и чек‑листы для ролей.
Важно: во всех командах используйте привилегированного sudo‑пользователя с правами администратора. Заменяйте примеры IP и имена хостов на ваши реальные значения.
Основные варианты применения
- Локальная разработка и тестирование приложений Java сервлетов и JSP
- Развёртывание лёгкого приложения в продакшн с Nginx как фронтендом
- Быстрая настройка тестового стенда для системного тестирования
Предварительные требования
- Сервер AlmaLinux 9 (x86_64) с рабочим сетевым подключением. 2 ГБ RAM и 20 ГБ диска — минимально для тестовой среды. Для продакшн потребуются больше ресурсов в зависимости от нагрузки.
- Непривилегированный пользователь с правами sudo.
- Свободные порты: 80 (HTTP) на Nginx и 8080 (Tomcat) по умолчанию.
Установка Java OpenJDK
Apache Tomcat требует установленную JDK (Java Development Kit). Рекомендуется Java 11 или выше; в примерах используется OpenJDK 17 из репозитория AlmaLinux 9.
Установка:
sudo dnf install java-17-openjdk java-17-openjdk-develПроверка установленной версии:
java --version
Совет: при наличии нескольких версий Java используйте alternatives или укажите JAVA_HOME явно в systemd‑юните Tomcat.
Загрузка и установка Apache Tomcat 10
Перейдите на страницу загрузок Apache Tomcat и скопируйте ссылку на бинарный tar.gz. В примерах используется версия 10.1.18 — замените переменную VERSION на актуальную версию.
Создайте системную группу и пользователя tomcat без интерактивного логина. Домашняя директория будет /opt/tomcat:
sudo groupadd tomcat
sudo adduser -r -s /usr/sbin/nologin -g tomcat -b /opt/tomcat tomcatСкачайте пакет (пример с переменной VERSION):
export VERSION=10.1.18
wget https://dlcdn.apache.org/tomcat/tomcat-10/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gzРаспаковка в /opt/tomcat и создание симлинка latest:
sudo mkdir -p /opt/tomcat
sudo tar -xf apache-tomcat-${VERSION}.tar.gz -C /opt/tomcat
sudo ln -s /opt/tomcat/apache-tomcat-${VERSION} /opt/tomcat/latest
sudo chown -R tomcat:tomcat /opt/tomcat
Пояснение: сохраняйте оригинальную структуру каталога Tomcat (/opt/tomcat/latest/bin, conf, webapps и т.д.), чтобы облегчить обновления — достаточно менять симлинк latest.
Настройка systemd‑сервиса для Tomcat
Создайте unit‑файл /etc/systemd/system/tomcat10.service:
sudo nano /etc/systemd/system/tomcat10.serviceВставьте следующий шаблон. Опция CATALINA_OPTS следует откорректировать под нагрузку (Xms/Xmx):
[Unit]
Description=Tomcat 10 servlet container
After=network.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment="JAVA_HOME=/usr/lib/jvm/java"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom -Djava.awt.headless=true"
Environment="CATALINA_BASE=/opt/tomcat/latest"
Environment="CATALINA_HOME=/opt/tomcat/latest"
Environment="CATALINA_PID=/opt/tomcat/latest/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx2048M -server -XX:+UseParallelGC"
ExecStart=/opt/tomcat/latest/bin/startup.sh
ExecStop=/opt/tomcat/latest/bin/shutdown.sh
[Install]
WantedBy=multi-user.targetПеречисленные переменные среды используются скриптами Tomcat для запуска JVM и указания директорий. Если ваш JAVA_HOME отличается — укажите точный путь.
Примените unit и запустите сервис:
sudo systemctl daemon-reload
sudo systemctl enable tomcat10
sudo systemctl start tomcat10
sudo systemctl status tomcat10
Проверьте сетевой доступ к порту 8080 (локально):
curl -I http://127.0.0.1:8080/Если Tomcat отвечает и возвращает HTTP 200/302 — сервис работает.
Открытие порта в firewalld
Откройте порт 8080 временно или используйте сервисы firewalld. Для временной (без перманентного сохранения):
sudo firewall-cmd --add-port=8080/tcpДля постоянного правила (рекомендуется для продовой среды), откройте HTTP и/или задайте конкретный порт:
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-allПримечание: в исходном материале была опечатка о «порту 0» — корректно открывать порт 80 (http) или 8080 (Tomcat) по назначению.
Установка аутентификации для Apache Tomcat Manager и Host Manager
Откройте файл пользователей Tomcat:
sudo nano /opt/tomcat/latest/conf/tomcat-users.xmlДобавьте роли и пользователя; обязательно замените пароль и имя пользователя на безопасные значения:
Важно: используйте сильные пароли и, по возможности, храните их в менеджере секретов. Не оставляйте учетную запись с паролем по умолчанию в продакшн.
Чтобы разрешить доступ к Manager/Host Manager не только с localhost, отредактируйте контексты:
sudo nano /opt/tomcat/latest/webapps/host-manager/META-INF/context.xml
sudo nano /opt/tomcat/latest/webapps/manager/META-INF/context.xmlЗаблокированную Valve закомментируйте или замените список разрешённых IP. Пример — закомментированный вариант, позволяющий доступ отовсюду (не рекомендуется для прод):
Или явно укажите список доверенных IP-адресов:
После изменений перезапустите Tomcat:
sudo systemctl restart tomcat10Проверьте доступ в браузере по адресу http://<вашipили_host>:8080/manager/ и авторизуйтесь.

Установка и настройка Nginx как обратного прокси
Установка Nginx:
sudo dnf install nginxСоздайте конфигурацию сервера /etc/nginx/conf.d/tomcat.conf:
sudo nano /etc/nginx/conf.d/tomcat.confПример простого серверного блока для обратного прокси (HTTP):
server {
listen 80;
server_name tomcat.howtoforge.local;
access_log /var/log/nginx/tomcat-access.log;
error_log /var/log/nginx/tomcat-error.log;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080/;
}
}Проверьте синтаксис и запустите Nginx:
sudo nginx -t
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginxПроверьте в браузере http://tomcat.howtoforge.local/ (или используйте локальный /etc/hosts для теста).

Рекомендация: SSL через Nginx (Let’s Encrypt)
Для продакшн обязательна HTTPS‑защита. Общий сценарий:
- Установите certbot и плагин для nginx (если доступен).
- Выполните certbot –nginx для получения сертификата и автоматической настройки Nginx.
- В конфигурации proxy добавьте заголовки безопасности и HSTS.
Пример дополнений в nginx для SSL:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Не забудьте открыть порт 443 в firewalld.
Конфигурация безопасности и рекомендации
Важно применять дополнительные меры безопасности перед переводом сервера в продакшн.
- Используйте отдельного системного пользователя tomcat без shell (как показано).
- Ограничьте доступ к Manager/Host Manager по IP (RemoteAddrValve) или используйте VPN/бастион.
- Храните учетные данные вне исходных конфигурационных файлов (секреты), по возможности используйте внешнюю систему управления секретами.
- Запретите доступ к /manager и /host-manager через публичный интернет; проброс через Nginx можно ограничивать по IP и использовать двухфакторную авторизацию в фронтенде.
- Настройте logrotate для логов Tomcat и Nginx.
- Включите регулярные обновления ОС и JVM.
- Минимизируйте ненужные webapps (удалите examples, docs в проде).
- Журналируйте и мониторьте метрики JVM (heap, GC) и состояние сервиса.
Снижение риска утечек:
- Снимите проброс директории server.xml и отключите распечатку версий сервера.
- В CATALINA_OPTS добавьте параметры для ограничения информации об ошибках.
SELinux: если включён, он может блокировать доступ. Для отладки временно переключите в permissive и настройте постоянные правила с помощью semanage и chcon. Пример отладки:
# временно
sudo setenforce 0
# затем найдите блокировки audit и создайте правила semanage в соответствии с рекомендациями (semanage/restorecon)Не оставляйте setenforce 0 постоянно в продакшн.
Операционные подсказки и отладка
- Просмотр логов Tomcat:
tail -f /opt/tomcat/latest/logs/catalina.out- Проверка процесса Java:
ps aux | grep java- Диагностика проблем с портом:
sudo ss -tulpn | grep 8080- Если Nginx проксирует, но страница пуста — проверьте proxy_pass заканчивается ли на / ; лишняя или отсутствующая косая черта меняет поведение.
Критерии приёмки
Проведите следующие проверки перед пометкой «готово к проду»:
- systemctl status tomcat10 → Active: active (running).
- curl -I http://127.0.0.1:8080/ → получение HTTP 200/302.
- Nginx отвечает на server_name и корректно проксирует: curl -I http://tomcat.howtoforge.local/ → тот же ответ, что и напрямую на Tomcat.
- Доступ к /manager и /host-manager только после авторизации по заданным учетным данным.
- Логи Tomcat и Nginx не содержат критических ошибок при старте.
- Права на /opt/tomcat корректны: владельцем tomcat:tomcat, остальные пользователи не имеют записи.
- (Если включён SELinux) — нет AVC‑записей, связанных с Tomcat.
Чек‑лист по ролям
- Системный администратор:
- Установить JDK, создать пользователя tomcat, настроить systemd.
- Настроить мониторинг и бэкап конфигов.
- DevOps инженер:
- Автоматизировать развёртывание (Ansible/Playbook), настроить CI/CD для артефактов.
- Настроить логирование, alerting и метрики JVM.
- Разработчик:
- Убедиться, что приложение совместимо с Tomcat 10 (Servlet 5/Jakarta namespace), протестировать локально.
- Инженер по безопасности:
- Провести аудит доступов к Manager/Host Manager, проверить файлы конфигурации на наличие секретов.
Шаблоны и полезные сниппеты
- systemd‑unit (уже приведён выше).
- Минимальный nginx.conf с обратным проксированием (см. выше).
- Пример команды проверки доступности менеджера:
curl -u admin:YourStrongPassword -I http://tomcat.howtoforge.local/manager/html- Команда для замены владельца и установки прав:
sudo chown -R tomcat:tomcat /opt/tomcat
sudo chmod -R go-w /opt/tomcat/confТестовые сценарии / кейсы приёмки
Тест 1: Старт/Стоп сервиса
- Шаги: sudo systemctl start tomcat10; sudo systemctl stop tomcat10
- Ожидаемый результат: сервис корректно стартует и останавливается без ошибок в логе.
Тест 2: Доступ через Nginx
- Шаги: curl -I http://tomcat.howtoforge.local/
- Ожидаемый результат: HTTP 200/302 и содержимое соответствует странице Tomcat.
Тест 3: Аутентификация Manager
- Шаги: перейти в /manager и ввести учетные данные
- Ожидаемый результат: доступ только при корректных данных, невозможность доступа без авторизации.
Тест 4: Нагрузочный smoke‑тест
- Шаги: небольшая нагрузка (ab или wrk) для проверки стабильности JVM и проксирования.
- Ожидаемый результат: отсутствие OOM и критических ошибок, приемлемое время ответа.
Альтернативные подходы
- Установка Tomcat из пакета дистрибутива (dnf) — быстрее, но может быть неактуальная версия.
- Использование контейнеров (Docker, Podman) — изолирует окружение и упрощает обновления.
- Применение управляющего стека (Kubernetes) — для масштабирования и управления в кластерной среде.
Когда это не работает: если ваше приложение использует старый namespace javax.* и не совместимо с Jakarta EE (Tomcat 10 использует Jakarta namespace). В таком случае либо мигрируйте приложение, либо используйте Tomcat 9.
Короткий план развертывания (High‑level roadmap)
- Подготовка сервера (OS update, firewall, пользователь).
- Установка Java и проверка окружения.
- Установка Tomcat в /opt/tomcat, настройка прав.
- Создание and проверка systemd‑юнита.
- Настройка Manager/Host Manager (учётные записи и ограничение доступа).
- Установка Nginx, базовая конфигурация proxy.
- Тестирование, внедрение SSL, настройка мониторинга и бэкапов.
Короткий глоссарий (одно предложение на термин)
- Tomcat — контейнер сервлетов Java, реализующий спецификации Servlet/JSP и WebSocket.
- Nginx — быстрый HTTP/обратный прокси-сервер и статический веб‑сервер.
- systemd — менеджер системных сервисов в современных дистрибутивах Linux.
- SSL/TLS — протоколы шифрования для защиты передачи данных по сети.
- Reverse proxy — сервер-посредник, принимающий внешние запросы и пересылающий их на внутренние сервисы.
Частые ошибки и как их исправить
- Tomcat не стартует: проверьте catalina.out и systemd‑журналы (sudo journalctl -u tomcat10). Частая причина — неверный JAVA_HOME.
- Nginx возвращает 502 Bad Gateway: убедитесь, что Tomcat слушает на 127.0.0.1:8080 и что proxy_pass указан корректно.
- Доступ к Manager открыт для всех: настройте RemoteAddrValve или блокируйте через Nginx по IP/аутентификации.
Итог
Поздравляем — вы установили Apache Tomcat 10 вручную на AlmaLinux 9, настроили systemd‑сервис, включили базовую аутентификацию для Manager/Host Manager и настроили Nginx как обратный прокси. Следующие шаги: включите HTTPS, настройте мониторинг и автоматизируйте развертывание.

Короткая проверка: убедитесь, что сервисы запущены, Nginx проксирует на Tomcat, Manager доступен только через авторизацию, а порты открыты корректно в firewalld.
Важно: перед переводом сервера в продовую эксплуатацию выполните аудит конфигураций, настройте резервное копирование конфигов и регулярные обновления JVM.
Сводка
- Установили OpenJDK 17.
- Развернули Tomcat 10 в /opt/tomcat и создали systemd‑сервис tomcat10.
- Настроили базовую аутентификацию для менеджера и разрешили доступ по IP при необходимости.
- Поставили Nginx в качестве обратного прокси и проверили работу через локальный домен.
Дополнительные материалы: автоматизация через Ansible/Docker и интеграция с системами мониторинга значительно упрощают сопровождение на длительной дистанции.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента