Вступление
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 всего за несколько простых шагов. Эти базовые оптимизации рекомендуются не только для производства, но даже для сред тестирования и разработки, которые доступны в Интернете.