Как оптимизировать установку Tomcat в Ubuntu 14.04

Вступление

Tomcat - это популярная реализация технологий Java Servlet и JavaServer Pages. Он выпущен Apache Software Foundation под популярной лицензией Apache с открытым исходным кодом. Его мощные функции, выгодная лицензия и отличное сообщество делают его одним из лучших и наиболее предпочтительных Java-сервлетов.

Tomcat почти всегда требует дополнительной подстройки после его установки. Прочтите эту статью, чтобы узнать, как оптимизировать установку Tomcat, чтобы она работала безопасно и эффективно.

Эта статья продолжает тему запуска Tomcat в Ubuntu 14.04, и предполагается, что вы ранее читали https://www.digitalocean.com/community/tutorials/how-to-install-apache-tomcat-7-on-ubuntu -14-04-via-apt-get [Как установить Apache Tomcat 7 в Ubuntu 14.04 через Apt-Get].

Предпосылки

Это руководство было протестировано на Ubuntu 14.04. Описанные установка и конфигурация будут аналогичны для других версий ОС или ОС, но команды и расположение файлов конфигурации могут отличаться.

Для этого урока вам понадобятся:

  • Ubuntu 14.04 Droplet

  • Пользователь root без полномочий root (см. Https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04[Initial Setup Server с Ubuntu 14.04])

  • Tomcat установлен и настроен в соответствии с инструкциями в How To Установите Apache Tomcat 7 в Ubuntu 14.04 через Apt-Get

Все команды в этом руководстве должны выполняться от имени пользователя без полномочий root. Если для этой команды требуется root-доступ, ему будет предшествовать + sudo +.

Обслуживание запросов на стандартном порте HTTP

Как вы, наверное, уже заметили, Tomcat по умолчанию прослушивает TCP-порт 8080. Этот порт по умолчанию используется главным образом из-за того, что Tomcat работает под непривилегированным пользователем + tomcat7 +. В Linux только привилегированные пользователи, такие как + root +, могут прослушивать порты ниже 1024, если не настроено иное. Таким образом, вы не можете просто изменить порт прослушивания Tomcat на 80 (HTTP).

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

Самый простой способ (но не обязательно лучший) для решения этой проблемы - создание брандмауэра (iptables) - перенаправление с порта TCP 80 на порт TCP 8080. Это можно сделать с помощью команды + iptables +:

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

Чтобы сделать это правило Iptables постоянным, проверьте статью How To Set Создание брандмауэра с использованием IPTables в Ubuntu 14.04 в части * Сохранение конфигурации Iptables *.

Чтобы удалить это правило iptables, вы можете просто заменить флаг + -A + для добавления правил на флаг + -D + для удаления правил в приведенной выше команде следующим образом:

sudo iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

Такая простая пересылка трафика не является оптимальной с точки зрения безопасности или производительности. Вместо этого рекомендуется добавить веб-сервер, такой как Nginx, перед Tomcat. Причина этого заключается в том, что Tomcat - это просто Java-сервлет с основными функциями веб-сервера, а Nginx - это типичный, мощный, полнофункциональный веб-сервер. Вот несколько важных преимуществ использования Nginx в качестве сервера переднего плана:

  • Nginx более безопасен, чем Tomcat, и может эффективно защитить его от различных атак. В случае срочных обновлений безопасности гораздо проще, быстрее и безопаснее обновить внешний веб-сервер Nginx, чем беспокоиться о простоях и проблемах совместимости, связанных с обновлениями Tomcat.

  • Nginx более эффективно обслуживает трафик HTTP и HTTPS с лучшей поддержкой статического контента, кэширования и SSL.

  • Nginx легко настраивается для прослушивания на любом порту, включая 80 и 443.

Если вы уверены в вышеуказанных преимуществах, то сначала убедитесь, что вы удалили предыдущее правило iptables, а затем установите Nginx с помощью команды:

sudo apt-get install nginx

После этого отредактируйте конфигурацию блока сервера Nginx по умолчанию (+ / etc / nginx / sites-enabled / default +) с вашим любимым редактором, например так:

sudo nano /etc/nginx/sites-enabled/default

Найдите часть + location / +, которая определяет, как должны обрабатываться все запросы, и убедитесь, что она выглядит следующим образом:

/ И т.д. / Nginx / сайты с поддержкой / по умолчанию

location / {
   proxy_pass http://127.0.0.1:8080/;
}

Приведенная выше директива + proxy_pass + означает, что весь запрос должен быть перенаправлен на локальный IP-адрес 127.0.0.1 на TCP-порт 8080, где слушает Tomcat. Закройте файл и перезапустите Nginx с помощью команды:

sudo service nginx restart

После этого попробуйте получить доступ к Tomcat, подключившись к IP-адресу вашего Droplet через стандартный порт HTTP в вашем браузере. URL должен выглядеть как + http: // +. Если все работает нормально, следует открыть страницу Tomcat по умолчанию. Если нет, убедитесь, что вы удалили правило iptables и что Tomcat был правильно установлен в соответствии с требованиями данной статьи.

Обеспечение безопасности Tomcat

Обеспечение безопасности Tomcat, вероятно, является наиболее важной задачей, которой часто пренебрегают. К счастью, всего за несколько шагов вы можете получить довольно безопасную настройку Tomcat. Чтобы следовать этой части статьи, вы должны установить и настроить Nginx перед Tomcat, как описано ранее.

Удаление административных веб-приложений

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

Удаление инструментов веб-администрирования Tomcat полезно для безопасности, потому что вам не нужно беспокоиться о том, что кто-то может их использовать не по назначению. Эта хорошая практика безопасности обычно применяется для производственных площадок.

Административные веб-приложения содержатся в пакете Ubuntu + tomcat7-admin. Таким образом, чтобы удалить их, запустите команду:

sudo apt-get remove tomcat7-admin

Ограничение доступа к административным веб-приложениям

Если вы не удалили административные веб-приложения, как было рекомендовано в предыдущей части, мы можем по крайней мере ограничить доступ к ним. Их URL должны быть + http: /// manager / + и + http: /// host-manager / +. Если вы видите ошибку 404 Not Found на этих URL-адресах, это означает, что они уже удалены, и вам не нужно ничего делать. Тем не менее, вы можете прочитать следующие инструкции, чтобы узнать, как действовать с другими конфиденциальными ресурсами, которые вы можете защитить.

На этом этапе Nginx принимает соединения через порт 80, так что вы можете получить доступ ко всем веб-приложениям из + http: // + из любой точки мира. Точно так же Tomcat прослушивает порт 8080 в глобальном масштабе, т.е. + http: //: 8080 +, где вы можете найти те же приложения. Чтобы повысить безопасность, мы ограничим ресурсы, доступные на порту 80 через Nginx. Мы также сделаем Tomcat и его открытый порт 8080 доступным только локально для сервера и Nginx.

Откройте файл конфигурации блока сервера по умолчанию + / etc / nginx / sites-enabled / default +:

sudo nano /etc/nginx/sites-enabled/default

После директивы + server_name +, но выше корневого расположения по умолчанию (+ location / +) добавьте следующее и замените ++ на IP-адрес вашего локального компьютера:

/ И т.д. / Nginx / сайты с поддержкой / по умолчанию

...
location /manager/ {
   allow ;
   deny all;
   proxy_pass http://127.0.0.1:8080/manager/;
}
...

Вы должны применить то же ограничение к приложению host-manager, добавив еще один блок конфигурации, в котором + manager + заменяется на + host-manager +, как это (опять же, замените ++ на ваш локальный IP-адрес):

/ И т.д. / Nginx / сайты с поддержкой / по умолчанию

...
location /host-manager/ {
   allow ;
   deny all;
   proxy_pass http://127.0.0.1:8080/host-manager/;
}
...

После перезапуска Nginx доступ к веб-контекстам + manager и` + host-manager` будет ограничен только вашим локальным IP-адресом:

sudo service nginx restart

Вы можете проверить это, открыв в браузере + http: /// manager / + и + http: /// host-manager / +. Приложения должны быть доступны, но если вы попытаетесь получить доступ к одним и тем же URL-адресам с помощью общедоступного прокси-сервера или другого компьютера, вы должны увидеть ошибку 403 Forbidden.

Кроме того, в качестве дополнительной меры вы также можете удалить документацию и примеры Tomcat с помощью команды:

sudo apt-get remove tomcat7-docs tomcat7-examples

Обратите внимание, что Tomcat по-прежнему прослушивает внешние соединения через порт TCP 8080. Таким образом, Nginx и его меры безопасности можно легко обойти. Чтобы решить эту проблему, настройте Tomcat на прослушивание только на локальном интерфейсе 127.0.0.1. Для этого откройте файл + / etc / tomcat7 / server.xml в вашем любимом редакторе:

sudo nano /etc/tomcat7/server.xml

Добавьте + address =" 127.0.0.1 "+ в части конфигурации + Connector + следующим образом:

/etc/tomcat7/server.xml

...
<Connector  port="8080" protocol="HTTP/1.1"
   connectionTimeout="20000"
   URIEncoding="UTF-8"
   redirectPort="8443" />
...

После этого перезапустите Tomcat, чтобы новые настройки вступили в силу:

sudo service tomcat7 restart

Выполнение вышеуказанных шагов обеспечит хороший базовый уровень безопасности для Tomcat.

Точная настройка параметров JVM

Естественно, принципы тонкой настройки универсальной виртуальной машины Java (JVM) применимы и к Tomcat. Хотя настройка JVM является целой наукой сама по себе, есть несколько основных полезных практик, которые каждый может легко применить:

  • Максимальный размер кучи + Xmx + - это максимальный объем памяти, который может использовать Tomcat. Это должно быть установлено в значение, которое оставляет достаточно свободной памяти для запуска самой капли и любых других служб, которые могут быть у вас на капле. Например, если у вашей Droplet есть 2 ГБ ОЗУ, то было бы безопасно выделить 1 ГБ ОЗУ для xmx. Однако имейте в виду, что фактическая память, которую использует Tomcat, будет немного больше, чем размер + Xmx +.

  • Минимальный размер кучи + Xms + - это объем памяти, выделяемый при запуске. В большинстве случаев оно должно быть равно значению xmx. Таким образом, вы избежите запуска дорогостоящего процесса выделения памяти, поскольку размер выделенной памяти будет постоянным все время.

  • Память, в которой классы хранятся постоянно, + MaxPermSize +, должна позволять Tomcat загружать классы ваших приложений и оставлять свободную память из значения + Xmx + для создания экземпляров этих классов. Если вы не уверены, сколько памяти требуют классы ваших приложений, то вы можете установить для + MaxPermSize + половину размера + Xmx + в качестве начала - 512 МБ в нашем примере.

В Ubuntu 14.04 вы можете настроить параметры JVM Tomcat, отредактировав файл + / etc / default / tomcat7 +. Итак, чтобы применить приведенные выше советы, пожалуйста, откройте этот файл в вашем любимом редакторе:

sudo nano /etc/default/tomcat7

Если вы выполнили инструкции по установке Tomcat из предварительных условий, вы должны найти следующую строку:

/ И т.д. / по умолчанию / tomcat7

...
JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Xmx512m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC"
...

Если у вашей Droplet есть 2 ГБ ОЗУ и вы хотите выделить около 1 ГБ для Tomcat, эту строку следует изменить на:

/ И т.д. / по умолчанию / tomcat7

...
JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true  -Xmx -XX:MaxPermSize= -XX:+UseConcMarkSweepGC"
...

Чтобы этот параметр вступил в силу, необходимо перезапустить Tomcat:

sudo service tomcat7 restart

Приведенная выше конфигурация JVM является хорошим началом, но вы должны следить за журналом Tomcat (+ / var / log / tomcat7 / catalina.out +) на наличие проблем, особенно после перезапуска Tomcat или выполнения развертываний. Для мониторинга журнала используйте команду + tail + следующим образом:

sudo tail -f /var/log/tomcat7/catalina.out

Если вы новичок в + tail +, вы должны нажать комбинацию клавиш + Ctrl-C + на клавиатуре, чтобы прекратить запись журнала.

Поиск ошибок, таких как + OutOfMemoryError +. Такая ошибка может указывать на то, что вам нужно адаптировать настройки JVM и, более конкретно, увеличить размер + Xmx +.

Заключение

Это оно! Теперь вы создали и оптимизировали Tomcat всего за несколько простых шагов. Эти базовые оптимизации рекомендуются не только для производства, но даже для сред тестирования и разработки, которые доступны в Интернете.

Related