Вводный порт 80 с JAVA-приложением на Ubuntu

То, что я должен сделать, запускает JAVA-приложение, которое является УСПОКОИТЕЛЬНОЙ сервисной стороной сервера writtern Restlet. И этот сервис назовет другое приложение, работающее на Google App Engine.

Из-за ограничения GAE каждый вызов http ограничен для портирования 80 и 443 (http и https) с классом HttpUrlConnection. В результате я должен развернуть свое серверное приложение на порте 80 или 443.

Однако, потому что приложение работает на Ubuntu, и к тем портам под 1 024 не может получить доступ некорневой пользователь, затем исключение Доступа запрещен будет выдано, когда я запущу свое приложение.

Решения, которые вошли в мой ум, включают:

  1. Изменение политики безопасности JRE, который является файлами, находится в/lib/security/java.policy к grantjava.net. SocketPermission "*.80" "слушает, соединяет, принимает, твердость" permission。However, никакая командная строка использования для включения этого файла, или переопределяет содержание в java.policy файле JRE, то же исключение продолжает выходить.

  2. попытайтесь войти в систему как пользователь root, однако потому что мое отсутствие близости с Unix, я не знаю, как сделать это.

  3. другое решение у меня нет попытки, состоит в том, чтобы отобразить все вызовы на 80 к более высокому порту как 1234, затем я могу развернуть свое приложение на 1234 без проблемы, и вызов GAE отправляет запрос для портирования 80. Но как соединиться, недостающий разрыв является все еще проблемой.

В настоящее время я использую метод "взламывания", который должен упаковать приложение в файл банки и sudo выполнение файла банки с полномочием пользователя root. Это работает теперь, но определенно не соответствующее в реальной среде развертывания.

Таким образом, если у кого-либо есть какая-либо идея о решении, спасибо очень много!

6
задан George Johnston 15 March 2010 в 01:50
поделиться

3 ответа

Решение 1. Это ничего не изменит, это не ограничение Java, это ОС, которая не позволяет использовать привилегированные номера портов (порты ниже 1024).

Решение 2: Не лучшая идея, IMO, есть веские причины не запускать процесс от имени пользователя root.

Решение 3. Используйте setcap или iptables . См. предыдущий вопрос .

2
ответ дан 10 December 2019 в 02:46
поделиться

Намного более простым решением является установка обратного прокси-сервера в Apache httpd, который Ubuntu будет запускать для вас через порт 80 из /etc/init.d.

Есть также способы добраться сюда с помощью iptables, но у меня нет недавнего личного опыта. У меня сейчас такой прокси работает.

1
ответ дан 10 December 2019 в 02:46
поделиться

Вы можете использовать iptables для перенаправления, используя что-то вроде этого:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport http -j REDIRECT --to-ports 8080

Сделайте изменения постоянными (сохранятся после перезагрузки) с помощью:

iptables-save
6
ответ дан 10 December 2019 в 02:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: