2013-06-26 2 views
4

Я недавно установил Tomcat 7 на Amazon ec2. Я обнаружил, что Tomcat по умолчанию прослушивает порт 8080.Apache httpd vs. Tomcat 7: порт 80 против порта 8080

Документация в Интернете утверждает, что это связано с тем, что Linux лучше сохраняет нижние порты суперпользователю. (Решение на ec2 btw создает балансировщик нагрузки - направление сообщений с порта 80 на порт 8080 на целевой машине)

Tha - к моему удивлению, я продолжил работу и установил сервер Apache на другой машине (yum install httpd), и удивление! - Apache прослушивает порт 80 по умолчанию!

Это неудобно, я думал ... где теперь находятся сторонники «порта 8080»?

Может кто-нибудь объяснить концептуальную разницу?

Благодаря

+0

Вы можете отлично использовать 80 для tomcat, но он обычно хранится на сервере Apache httpd. –

+0

Что такое * вопрос? * Вы не понимаете «концептуальную разницу» между 80 и 8080 годами? Вы удивлены, что HTTP-серверы прослушивают порт 80? Вы удивлены тем, что Томкат слушает поэта 8080? Вы думаете, что должна быть осязаемая группа «сторонников порта 8080»? – EJP

ответ

6

Разница в основном исторический в данный момент, но все-таки в жизнь Linux и в большинстве реализаций Unix, что я могу думать. Unix/Linux считает, что любой номер порта < 1024 должен быть «привилегированным» и требует, чтобы корневые привилегии связывались с ними. Любой пользователь должен иметь возможность привязываться к портам выше 1024. Если ваш программный пакет имеет определенный винтаж, он ожидает, что он будет запущен как root, привязанный к порту, и, при необходимости, он изменит эффективный UID для не привилегированного пользователя. Apache HTTPD относится к этой категории. Пакеты программного обеспечения, созданные позже (например, Apache Tomcat), обычно шли по пути выполнения всего с непривилегированным пользователем и привязки к более высокому номеру порта по умолчанию.

Некоторые администраторы брандмауэра могут, я уверен, подробно рассказать о том, как иногда порт получат специальное лечение в конфигурациях брандмауэра.

1

Я продолжаю объяснение. Поскольку @gunglefunk уже имеет антивирусное ПО, httpd использует порт 80, потому что он запускает главный демон до пользователя root/привилегированного пользователя, который позволяет связывать любой порт меньше 1024. Все остальные потоки или рабочие запускают незащищенный пользователь (в основном apache).

Tomcat может использовать тот же принцип. Tomcat полностью написан на Java, поэтому есть только один пользователь, который используется для запуска всей JVM. Обычно это «tomcat» пользователя.

Когда вы хотите слушать Tomcat на порту 80, у вас есть две возможности.

Запустите tomcat под «root» (измените его в tomcat.conf или catalina.sh). Однако это не рекомендуется по соображениям безопасности.

Запустите tomcat на любом порту выше 1024 под стандартным пользователем (обычно tomcat) и используйте протокол proxy_ajp. Это означает, что вы также запускаете Apache HTTPD-сервер на порту 80 и перенаправляете трафик на порт tomcat (по умолчанию используется протокол http 8080, https на 8443, ajp - 8009). См. https://httpd.apache.org/docs/2.2/mod/mod_proxy_ajp.html и http://tomcat.apache.org/connectors-doc/ajp/ajpv13a.html и http://tomcat.apache.org/connectors-doc-archive/jk2/proxy.html

0

Вам не нужно запускать процесс как root, чтобы привязать его к привилегированному порту.

Вы можете использовать setcap дать ему такое разрешение:

https://wiki.apache.org/httpd/NonRootPortBinding

Это на самом деле не нужно, хотя.

Вы можете просто использовать iptables для пересылки на более высокий порт, например.

Есть также такие инструменты, как authbind, которые были сделаны для этой цели.

Кроме того, если безопасность является проблемой, вы также можете запустить процесс в тюрьме chroot.