Гид по технологиям

Установка Apache Tomcat 10 с Nginx в качестве обратного прокси на AlmaLinux 9

• 8 min read • Серверы • Обновлено 23 Nov 2025
Tomcat 10 с Nginx на AlmaLinux 9
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

Установка OpenJDK 17 и вывод версии

Совет: при наличии нескольких версий 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

Распаковка и установка Apache 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

Проверка статуса 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/ и авторизуйтесь.

Авторизация в Tomcat 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 для теста).

Установка и запуск Nginx

Рекомендация: SSL через Nginx (Let’s Encrypt)

Для продакшн обязательна HTTPS‑защита. Общий сценарий:

  1. Установите certbot и плагин для nginx (если доступен).
  2. Выполните certbot –nginx для получения сертификата и автоматической настройки Nginx.
  3. В конфигурации 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 заканчивается ли на / ; лишняя или отсутствующая косая черта меняет поведение.

Критерии приёмки

Проведите следующие проверки перед пометкой «готово к проду»:

  1. systemctl status tomcat10 → Active: active (running).
  2. curl -I http://127.0.0.1:8080/ → получение HTTP 200/302.
  3. Nginx отвечает на server_name и корректно проксирует: curl -I http://tomcat.howtoforge.local/ → тот же ответ, что и напрямую на Tomcat.
  4. Доступ к /manager и /host-manager только после авторизации по заданным учетным данным.
  5. Логи Tomcat и Nginx не содержат критических ошибок при старте.
  6. Права на /opt/tomcat корректны: владельцем tomcat:tomcat, остальные пользователи не имеют записи.
  7. (Если включён SELinux) — нет AVC‑записей, связанных с Tomcat.

Чек‑лист по ролям

  • Системный администратор:
    • Установить JDK, создать пользователя tomcat, настроить systemd.
    • Настроить мониторинг и бэкап конфигов.
  • DevOps инженер:
    • Автоматизировать развёртывание (Ansible/Playbook), настроить CI/CD для артефактов.
    • Настроить логирование, alerting и метрики JVM.
  • Разработчик:
    • Убедиться, что приложение совместимо с Tomcat 10 (Servlet 5/Jakarta namespace), протестировать локально.
  • Инженер по безопасности:
    • Провести аудит доступов к Manager/Host Manager, проверить файлы конфигурации на наличие секретов.

Шаблоны и полезные сниппеты

  1. systemd‑unit (уже приведён выше).
  2. Минимальный nginx.conf с обратным проксированием (см. выше).
  3. Пример команды проверки доступности менеджера:
curl -u admin:YourStrongPassword -I http://tomcat.howtoforge.local/manager/html
  1. Команда для замены владельца и установки прав:
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)

  1. Подготовка сервера (OS update, firewall, пользователь).
  2. Установка Java и проверка окружения.
  3. Установка Tomcat в /opt/tomcat, настройка прав.
  4. Создание and проверка systemd‑юнита.
  5. Настройка Manager/Host Manager (учётные записи и ограничение доступа).
  6. Установка Nginx, базовая конфигурация proxy.
  7. Тестирование, внедрение 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, настройте мониторинг и автоматизируйте развертывание.

Главная страница Tomcat после настройки обратного прокси

Короткая проверка: убедитесь, что сервисы запущены, Nginx проксирует на Tomcat, Manager доступен только через авторизацию, а порты открыты корректно в firewalld.

Важно: перед переводом сервера в продовую эксплуатацию выполните аудит конфигураций, настройте резервное копирование конфигов и регулярные обновления JVM.

Сводка

  • Установили OpenJDK 17.
  • Развернули Tomcat 10 в /opt/tomcat и создали systemd‑сервис tomcat10.
  • Настроили базовую аутентификацию для менеджера и разрешили доступ по IP при необходимости.
  • Поставили Nginx в качестве обратного прокси и проверили работу через локальный домен.

Дополнительные материалы: автоматизация через Ansible/Docker и интеграция с системами мониторинга значительно упрощают сопровождение на длительной дистанции.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро