Назад | Перейти на главную страницу

Разверните Jetty как демон порта 80 в Linux

Мне любопытно, какие методы вы, боги-администраторы Linux, используете для управления развертываниями Jetty. Я работаю с Windows Server, поэтому все еще привыкаю ко всему этому. Я искал хорошее решение для развертывания экземпляров Jetty в качестве порта 80 в установке Linux.

До сих пор я видел этот поток, который позволяет Jetty работать как демон:

http://jira.codehaus.org/browse/JETTY-458

И я видел эту ветку, в которой рассказывается об альтернативах для настройки порта 80:

http://wiki.eclipse.org/Jetty/Howto/Port80

Все это казалось чем-то вроде взлома. Конечно, существует относительно стандартный способ развертывания веб-сервера, такого как Jetty, в Linux. В настоящее время я использую CentOS 5.5, но открыт для других дистрибутивов.

Заранее спасибо.

К сожалению, процессы Java не демонизируются так же хорошо, как другие языки. Для Jetty вы захотите использовать что-то вроде демонизировать для запуска и управления процессом.

редактировать - некоторые дополнительные детали:

После сборки daemonize (согласно инструкциям в приведенной выше ссылке) параметры командной строки объясняются в сгенерированном файле daemonize.html. Проверьте его с помощью команды запуска, чтобы убедиться, что он работает должным образом.

Затем, чтобы запустить Jetty при запуске, добавьте команду daemonize в сценарий оболочки инициализации (например, для CentOS / RHEL добавить /etc/rc.d/rc.local). Например:

#!/bin/bash
#...other startup commands

/path-to/daemonize -c /path-to/jetty/ -p pid.txt -e error.log -o console.log -a /usr/bin/java -jar start.jar

Я бы поставил прокси Apache2 перед сервером приложений. В Apache2 есть специальный модуль, предназначенный для этого. Он добавляет соответствующие заголовки к запросу вашего приложения для идентификации удаленного пользователя. Apache2 можно использовать для обслуживания статического контента и передачи запросов приложений на сервер приложений.

Windows не поддерживает привилегированные порты (порты меньше 1024). Помимо запуска Jetty от имени root, требуется некоторая методика привязки порта 80 как root и передачи данных в Jetty. Apache2 использует setuid после привязки порта, чтобы процесс, обрабатывающий запрос, не имел корневого доступа к вашей системе.

На найденных вами сайтах есть несколько вариантов:

  • Перенаправьте порт 80 на непривилегированный порт с помощью iptables или ipchains.
  • Используйте оболочку для привязки порта 80, а затем выполните команду setuid перед передачей управления Jetty в качестве демона. Java не предоставляет прямого доступа к setuid, поэтому требуются собственные библиотеки.
  • Перенаправьте порт 80 на непривилегированный порт с помощью xinetd. Вместо этого я бы использовал iptables.