Оптимізація Tomcat на сервері Ubuntu

Пропозиція від 8host.com

сервері

Tomcat – це популярний сервер додатків, реалізація технологій Java Servlet та JavaServer Pages. Розроблений компанією Apache Software та поширюється згідно з відкритою ліцензією Apache. Завдяки своїй продуктивності, зручному набору функцій, популярної ліцензії та активній спільноті Tomcat є однією з найкращих та найпопулярніших реалізацій Java Servlet.

Після встановлення Tomcat майже завжди потребує додаткового тонкого налаштування. Цей посібник допоможе оптимізувати Tomcat, а також підвищивши його безпеку та продуктивність.

Примітка : Цей посібник є продовженням статті «Установка Apache Tomcat 7 в Ubuntu 14.04», тому мається на увазі, що Apache Tomcat вже встановлено.

Вимоги

  • Налаштований сервер Ubuntu 14.04.
  • Чи не-root користувач з доступом до sudo (про це можна прочитати тут).
  • Попередньо встановлений сервер Apache Tomcat (відповідно до цього посібника).

Усі команди керівництва слід виконувати з правами sudo.

Обслуговування запитів на стандартному порту HTTP

За замовчуванням сервер Tomcat слухає запити TCP на порті 8080. Цей порт використовується тому, що Tomcat працює через обліковий запис tomcat7, який не має привілеїв. У системах Linux лише користувачі з привілеями root можуть слухати порти нижче 1024. Щоб відкрити доступ до цих портів для непривілейованих користувачів, потрібно виконати додаткове налаштування системи. Тобто просто так змінити порт Tomcat на 80 (HTTP) не вийде.

Отже, перше налаштування Tomcat, яке потрібно оптимізувати, це порт. Усі веб-програми Tomcat повиннідоступні на стандартному порту HTTP.

Найпростіший (хоча, можливо, не найкращий) спосіб зробити це – створити правило iptables, яке перенаправляє запити з TCP-порту 80 на порт 8080. Для цього використовуйте команду:

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

Щоб видалити це правило, просто замініть прапорець -А (додає правило) прапором -D :

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

  • Nginx безпечніше, ніж Tomcat, і може запобігти безлічі атак. При необхідності терміново оновити безпеку набагато простіше, швидше та надійніше оновити фронтенд Nginx та не турбуватися про проблеми сумісності під час оновлення Tomcat.
  • Nginx більш продуктивний при обробці трафіку HTTP і HTTPS, краще справляється з підтримкою статичного контенту, кешування та SSL.
  • Nginx легко налаштувати для прослуховування будь-якого порту, у тому числі 80 і 443.

Якщо такий варіант вам підходить і ви хочете встановити Nginx, спочатку видаліть раніше додане правило Iptables, а потім встановіть Nginx за допомогою команди:

sudo apt-get install nginx

Після цього відредагуйте стандартний блок-сервер (/etc/nginx/sites-enabled/default).

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

Знайдіть у ньому блок location /, який описує, як будуть обслуговуватися запити, та змініть його таким чином:

location / proxy_pass http://127.0.0.1:8080/; >

sudo service nginx restart

Якщо правильно налаштовано, на екрані з'явиться стандартна сторінка Tomcat. Якщо сторінка не відкривається, переконайтеся, що правило iptables видалено, і що установка Tomcat пройшла успішно.

Захист Tomcat

Захист Tomcat - ймовірно, найважливіше завдання при оптимізації налаштувань, про яку часто забувають. До того ж, захистити Tomcat дуже просто.

Примітка : Щоб дотримуватися цього розділу, потрібно встановити та налаштувати Nginx на фронт-енді, як описано в попередньому розділі.

Видалення адміністративних веб-додатків

Для Tomcat типовий компроміс між функціональністю та безпекою також дійсний. Таким чином, для підвищення безпеки можна видалити стандартні програми web manager та host-manager. Звичайно, це не дуже зручно, оскільки згодом доведеться виконувати завдання адміністратора (у тому числі розгортання веб-додатків) з командного рядка.

Однак, щоб не перейматися тим, що хтось може зловживати доступом, краще видалити інструменти адміністратора Tomcat. Це покращення безпеки зазвичай застосовується на сайтах, що знаходяться на стадії виробництва.

Веб-програми адміністратора зберігаються в Ubuntu в пакеті tomcat7-admin. Видаліть цей пакет.

sudo apt-get remove tomcat7-admin

Обмеження доступу до програм адміністратора

На даному етапі веб-сервер Nginx приймає з'єднання на порт 80, отже, можна отримати доступ до всіх програм за посиланням:

Аналогічно, Tomcat слухає порт 8080:

За цим посиланням всі програми також доступні. Для підвищення безпеки необхідно обмежити доступ до ресурсів порту 80 за допомогою Nginx. Також потрібно частково заблокувати порт 8080 та Tomcat, залишивши лише локальний доступ та Nginx.

Відкрийте стандартний віртуальний хост (або блок-сервер):

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

. location /manager/ allow your_local_ip; deny all; proxy_pass http://127.0.0.1:8080/manager/; > .

Додайте такі самі обмеження для програми host-manager; для цього вставте ще один блок налаштувань, замінивши manager на host-manager:

. location /host-manager/ allow your_local_ip; deny all; proxy_pass http://127.0.0.1:8080/host-manager/; > .

Перезапустіть Nginx, а потім спробуйте відкрити manager та host-manager.

sudo service nginx restart

Відкрийте браузер і перейдіть до:

Як додатковий захід безпеки можна також видалити документацію та приклади Tomcat:

sudo apt-get remove tomcat7-docs tomcat7-examples

Майте на увазі: Tomcat як і раніше слухає зовнішні з'єднання на порті 8080. Отже, можна без особливих зусиль обійти захист Nginx. Щоб вирішити цю проблему, можна настроїти Tomcat для прослуховування лише локального інтерфейсу 127.0.0.1. Для цього відкрийте файл /etc/tomcat7/server.xml:

sudo nano /etc/tomcat7/server.xml

Додайте address="127.0.0.1" у розділі Connector:

Після перезавантаження Tomcat оновить налаштування:

sudo service tomcat7 restart

Тепер сервер Tomcat надійно захищений.

Налагодження параметрів JVM

Звичайно, базові принципи тонкої настройки Java Virtual Machine (JVM) застосовні і до Tomcat. Звісно, ​​налаштування віртуальної машини Java – це ціла наука; але існують і базові способи налаштування:

  • Максимальний розмір хіпа, Xmx – це максимальний об'єм пам'яті Tomcat. Тут потрібно встановити значення, яке залишить достатньо вільного місця для роботи самого сервера та інших сервісів. Наприклад, якщо сервер має 2 Гб оперативної пам'яті, то Xmx безпечно було б виділити 1 Гб оперативної пам'яті. Однак майте на увазі, що фактично Tomcat використовує трохи більшепам'яті, ніж в Xmx.
  • Мінімальний розмір хіпу, Xms – це мінімальний обсяг пам'яті, що виділяється під час запуску. Найчастіше він повинен збігатися з xmx. Таким чином, можна уникнути витратного процесу розподілу пам'яті (оскільки розмір виділеної пам'яті буде постійним).
  • Параметр MaxPermSize відповідає за пам'ять, де постійно зберігаються класи, і дозволяє Tomcat завантажувати класи додатків і залишати вільну пам'ять Xmx для створення екземплярів цих класів. Якщо ви не знаєте скільки пам'яті вимагають класи додатків, можете для початку встановити в MaxPermSize половину об'єму Xmx (512 Мб в даному випадку).

У Ubuntu 14.04 відредагувати параметри JVM для Tomcat можна у файлі /etc/default/tomcat7:

sudo nano /etc/default/tomcat7

Якщо Tomcat було встановлено згідно з запропонованим у розділі Вимоги посібнику, у файлі буде наступний рядок:

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

Наприклад, щоб виділити 1 Гб з 2Гб оперативної пам'яті для Tomcat, цей рядок потрібно змінити так:

. JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Xms1024m -Xmx1024m -XX:MaxPermSize=512m -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 захищений і продуктивніший. Ці базові процедури для оптимізації рекомендується виконувати не тільки в середовищі виробництва, але також для тестування та середовища розробки з доступом до Інтернету.