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

Установка Apache Tomcat 10 на Rocky Linux 8.5 с Nginx и защитой по SSL

• 7 min read • DevOps • Обновлено 27 Nov 2025
Установка Tomcat 10 на Rocky Linux с Nginx и SSL
Установка Tomcat 10 на Rocky Linux с Nginx и SSL

Архитектура: Tomcat за Nginx, защищённый SSL

Введение

Apache Tomcat — это сервер приложений с открытым исходным кодом для Java-приложений, реализующий спецификации Java Servlet, JavaServer Pages (JSP), Java Expression Language и Java WebSocket. В этом руководстве мы устанавливаем Tomcat 10 на Rocky Linux 8.5, проксируем трафик через Nginx и защищаем соединения с помощью сертификата от Let’s Encrypt.

Кому полезно это руководство

  • Сисадминам и инженерам DevOps, разворачивающим Java-приложения.
  • Тем, кто хочет безопасно выставить Tomcat в публичную сеть (через Nginx + SSL).
  • Тем, кто предпочитает управлять сервисами через systemd.

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

Основные требования

  • Сервер с Rocky Linux 8.5 (доступ по SSH).
  • Пользователь с sudo-привилегиями.
  • Подключение к интернету для загрузки пакетов и сертификатов.
  • Рекомендуется резервная копия важных данных перед началом.

Минимальные пакеты и обновления

Выполните обновление системы и установите утилиты wget и tar:

$ sudo dnf update
$ sudo dnf install wget tar

Примечание: при использовании SELinux настоятельно рекомендуется проверить контексты файлов и, при необходимости, создать политики (см. раздел «Безопасность и SELinux»).

Шаг 1 — Установка Java (OpenJDK 11)

Tomcat 9 и 10 требуют Java 8 или новее. Рекомендуемая версия для этого руководства — OpenJDK 11.

Установите OpenJDK 11:

$ sudo dnf install java-11-openjdk-devel

Проверьте версию Java:

$ java -version
openjdk version "11.0.13" 2021-10-19 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.13+8-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.13+8-LTS, mixed mode, sharing)

Короткое определение: OpenJDK — открытая реализация платформы Java.

Альтернатива: можно использовать Zulu/Corretto или другие дистрибутивы JDK при наличии корпоративных требований; в таком случае укажите корректный путь JAVA_HOME в systemd‑единице.

Шаг 2 — Создание системного пользователя для Tomcat

Для минимизации рисков безопасности запускайте Tomcat не от root. Создаём системного пользователя с домашней директорией /opt/tomcat:

$ sudo useradd -m -U -d /opt/tomcat -s /bin/false tomcat

Пояснение: /bin/false запрещает интерактивную авторизацию для этого пользователя.

Шаг 3 — Загрузка и развёртывание Tomcat

Проверьте актуальную стабильную версию Tomcat 10 на официальном сайте и подставьте в переменную VERSION. В примере используется 10.0.14 (на момент исходного руководства).

$ VERSION=10.0.14
$ wget https://dlcdn.apache.org/tomcat/tomcat-10/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz

Распакуйте в /opt/tomcat:

$ sudo tar -xf apache-tomcat-${VERSION}.tar.gz -C /opt/tomcat/

Создайте символическую ссылку latest для удобства обновлений:

$ sudo ln -s /opt/tomcat/apache-tomcat-${VERSION} /opt/tomcat/latest

Установите владельца директорий на пользователя tomcat:

$ sudo chown -R tomcat:tomcat /opt/tomcat

Совет: при будущем апгрейде распакуйте новую версию в /opt/tomcat/apache-tomcat-, обновите симлинк /opt/tomcat/latest и перезапустите сервис.

Шаг 4 — Создание systemd‑unit файла

Создайте сервисный файл /etc/systemd/system/tomcat.service:

$ sudo nano /etc/systemd/system/tomcat.service

Вставьте следующий блок (проверьте пути JAVA_HOME, если Java установлена в другом месте):

[Unit]
Description=Apache Tomcat 10 Servlet container
Wants=network.target
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/jre"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"

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 -Xmx1024M -server -XX:+UseParallelGC"

ExecStart=/opt/tomcat/latest/bin/startup.sh
ExecStop=/opt/tomcat/latest/bin/shutdown.sh
Restart=always

[Install]
WantedBy=multi-user.target

Сохраните файл и выполните перезагрузку демона systemd перед включением сервиса.

Шаг 5 — Запуск и автозапуск Tomcat

$ sudo systemctl daemon-reload
$ sudo systemctl enable tomcat --now
$ sudo systemctl status tomcat

Пример вывода показывает, что Tomcat успешно запущен. Если сервис не стартует — проверьте журналы journalctl -u tomcat и права доступа к /opt/tomcat.

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

  • systemctl status показывает Active: active (running).
  • Порт 8080 слушает локально (netstat/ss).
  • Логи Tomcat в /opt/tomcat/latest/logs не содержат фатальных ошибок.

Шаг 6 — Настройка брандмауэра (firewalld)

Проверим состояние firewalld:

$ sudo firewall-cmd --state
running

Разрешаем HTTP и HTTPS:

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
$ sudo firewall-cmd --reload

Если вы используете нестандартные порты или только внутренний доступ к Tomcat (через Nginx на том же хосте), дополнительно откройте порт 8080 только для localhost или вовсе оставьте закрытым.

Шаг 7 — Настройка веб-интерфейса управления Tomcat (Manager / Host Manager)

Для доступа к менеджеру создайте пользователей в /opt/tomcat/latest/conf/tomcat-users.xml:

$ sudo nano /opt/tomcat/latest/conf/tomcat-users.xml

Добавьте роли и пользователей перед закрывающим тегом (замените логины и пароли на надёжные):




    

    

По умолчанию доступ менеджерских приложений ограничен localhost. Чтобы разрешить доступ извне (не рекомендуется без ограничений IP/VPN), отредактируйте файл /opt/tomcat/latest/webapps/manager/META-INF/context.xml и закомментируйте или измените RemoteAddrValve.

$ sudo nano /opt/tomcat/latest/webapps/manager/META-INF/context.xml

Чтобы разрешить доступ только с определённого IP, добавьте ваш публичный IP в список allow (пример для 22.22.22.22):

 

Сделайте аналогично для /opt/tomcat/latest/webapps/host-manager/META-INF/context.xml. После изменений перезапустите Tomcat:

$ sudo systemctl restart tomcat

Безопасность: открывать Manager/Host Manager в публичный доступ не рекомендуется. Используйте VPN, SSH‑туннель или ограничение по IP.

Шаг 8 — Установка SSL через Let’s Encrypt (Certbot)

Добавьте EPEL и установите certbot:

$ sudo dnf install epel-release
$ sudo dnf install certbot

Запрос сертификата (пример для tomcat.example.com):

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d tomcat.example.com

Сертификаты окажутся в /etc/letsencrypt/live/tomcat.example.com.

Создайте параметры Diffie-Hellman:

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Создайте директорию веб-рут для автоматического обновления и добавьте ежедневную задачу для проверки и продления сертификатов:

$ sudo mkdir -p /var/lib/letsencrypt
$ sudo nano /etc/cron.daily/certbot-renew

Контент файла:

#!/bin/sh
certbot renew --cert-name tomcat.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Сделайте файл исполняемым:

$ sudo chmod +x /etc/cron.daily/certbot-renew

Совет: вместо cron можно использовать systemd‑таймер для более гибкого контроля и логирования.

Шаг 9 — Установка и настройка Nginx как обратного прокси

Установите Nginx (модульная ветка 1.20):

$ sudo dnf module install nginx:1.20

Проверьте версию и запустите сервис:

$ nginx -v
nginx version: nginx/1.20.1
$ sudo systemctl enable nginx --now

Создайте конфигурацию /etc/nginx/conf.d/tomcat.conf:

$ sudo nano /etc/nginx/conf.d/tomcat.conf

Вставьте:

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  tomcat.example.com;

    access_log  /var/log/nginx/tomcat.access.log;
    error_log   /var/log/nginx/tomcat.error.log;
    
    # SSL
    ssl_certificate      /etc/letsencrypt/live/tomcat.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/tomcat.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/tomcat.example.com/chain.pem;
    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 8.8.8.8;

    location / {
      proxy_pass http://127.0.0.1:8080;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-Server $host;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}
# enforce HTTPS
server {
    listen       80;
    listen       [::]:80;
    server_name  tomcat.example.com;
    return 301   https://$host$request_uri;
}

Отредактируйте /etc/nginx/nginx.conf и увеличьте server_names_hash_bucket_size, вставив перед include /etc/nginx/conf.d/*.conf;:

server_names_hash_bucket_size  64;

Проверка и перезапуск:

$ sudo nginx -t
$ sudo systemctl restart nginx

Советы по проксированию

  • Убедитесь, что прокси передаёт заголовок X-Forwarded-For и Host (указано в конфигурации). Это нужно для корректной генерации ссылок и логов в Tomcat.
  • Если Nginx и Tomcat находятся на разных серверах, настройте брандмауэр так, чтобы порт 8080 был доступен только от Nginx.

Шаг 10 — Тестирование в браузере

Откройте https://tomcat.example.com — вы должны увидеть веб-интерфейс Tomcat.

Веб-интерфейс управления Tomcat — главная страница

Войдите в Manager и Host Manager с учётными данными, указанными в шаге 7.

Если страница не открывается:

  • Проверьте sudo systemctl status tomcat и journalctl -u tomcat.
  • Проверьте sudo systemctl status nginx и логи /var/log/nginx/*.log.
  • Убедитесь, что сертификат корректно сгенерирован и файлы цепочки существуют.

Безопасность и SELinux

Важно учитывать следующие моменты безопасности:

  • Не выставляйте Manager и Host Manager в интернет без ограничения по IP или без VPN.
  • Используйте надёжные пароли и, по возможности, двухфакторную аутентификацию вне Tomcat (например, через обратный прокси с базовой аутентификацией + ограничение по IP).
  • SELinux: на Rocky Linux SELinux обычно включён. Если после установки Tomcat или Nginx наблюдаются ошибки доступа, проверьте audit.log и примените необходимые контексты semanage fcontext и restorecon, либо создайте модуль политики.
  • Журналирование: перенаправляйте и централизуйте логи Tomcat и Nginx (rsyslog, Filebeat, Graylog и т.п.).

Пример проверки SELinux в случае проблем с доступом к сертификатам:

$ sudo ausearch -m avc -ts recent
$ sudo semanage fcontext -a -t cert_t "/etc/letsencrypt(/.*)?"
$ sudo restorecon -Rv /etc/letsencrypt

Резервирование, откат и план восстановления

Резервируйте следующие вещи перед изменением версии Tomcat или конфигурации:

  • /opt/tomcat/latest/conf (server.xml, tomcat-users.xml и т.д.)
  • Веб-приложения в /opt/tomcat/latest/webapps
  • Файлы сертификатов /etc/letsencrypt
  • systemd‑unit /etc/systemd/system/tomcat.service и nginx конфигурации

Простой план отката:

  1. Остановите сервисы: sudo systemctl stop nginx tomcat.
  2. Восстановите файлы конфигурации и симлинк latest к предыдущей версии Tomcat.
  3. Включите сервисы: sudo systemctl daemon-reload && sudo systemctl start tomcat nginx.
  4. Проверьте логи и статус.

Роль‑ориентированные чеклисты

Администратор Linux:

  • Установить OpenJDK, wget, tar.
  • Создать пользователя tomcat и установить права.
  • Развернуть Tomcat в /opt/tomcat и настроить systemd.

Инженер безопасности:

  • Проверить доступ к Manager/Host Manager.
  • Настроить ограничения по IP, SELinux и firewall.
  • Проверить политики SSL (отключить слабые протоколы).

DevOps / CI инженер:

  • Настроить процесс обновления Tomcat (симлинк latest, миграционные шаги).
  • Интегрировать развёртывание артефактов в Manager или через CI/CD pipeline.

Мини‑методология развёртывания (шаги высокого уровня)

  1. Подготовить OS и зависимости (обновления, пакеты).
  2. Установить JDK и проверить окружение.
  3. Развернуть Tomcat и создать systemd‑юнит.
  4. Настроить обратный прокси (Nginx) и SSL.
  5. Тестирование и проверка логов.
  6. Документирование и бэкап конфигураций.

Часто встречаемые ошибки и рекомендации по устранению

  • Проблема: Tomcat не стартует — проверьте journalctl -u tomcat и права на /opt/tomcat.
  • Проблема: 502 Bad Gateway от Nginx — проверьте, что Tomcat слушает на 127.0.0.1:8080 и что proxy_pass совпадает.
  • Проблема: Certbot не может получить валидацию — проверьте, что порт 80 открыт и не занят другим процессом.

Миграция с Tomcat 9 на Tomcat 10 — заметки по совместимости

Tomcat 10 использует Jakarta EE namespace (javax. -> jakarta.) для некоторых API. Приложения, скомпилированные для Tomcat 9 (Java EE / javax), могут требовать перекомпиляции или преобразования (иной namespace) для корректной работы в Tomcat 10. Если вы планируете миграцию приложений, сначала протестируйте их на staging‑окружении.

Короткий словарь терминов

  • Tomcat — контейнер сервлетов и веб-приложений Java.
  • Nginx — быстрый HTTP-сервер и обратный прокси.
  • Certbot — клиент для автоматического запроса и продления сертификатов Let’s Encrypt.
  • systemd — система инициализации и менеджер сервисов в современных дистрибутивах Linux.

Итоговое резюме

Вы установили Tomcat 10 на Rocky Linux 8.5, настроили его запуск как systemd‑сервис, организовали проксирование через Nginx и обеспечили доверенное соединение по HTTPS с сертификатом Let’s Encrypt. Дополнительно рассмотрены основные шаги по безопасности, резервированию и откату.

Вопросы и дальнейшие шаги

  • Рекомендуется автоматизировать развёртывание и обновления с помощью Ansible/Docker/Kubernetes в зависимости от масштаба.
  • По вопросам миграции приложений между версиями Tomcat обращайте внимание на namespace Jakarta EE.

Important: всегда проверяйте и обновляйте используемые компоненты безопасности и сертификаты.

Поделиться: 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 быстро