Защо Tomcat работи с порт 8080, но не и с 80?

Стартирах и тествах Tomcat под порт 8080 (по подразбиране). Сега промених порта на конектора на 80 и рестартирах Tomcat, нищо няма да се покаже на моята минимална инсталация на Debian 6.0. Къде е уловката тук?

<Connector port="80" protocol="HTTP/1.1" 
           connectionTimeout="20000" 
           URIEncoding="UTF-8"
           redirectPort="8443" />

person Dominik    schedule 04.05.2012    source източник
comment
Получихте ли BindException, може би, в catalina.out? Има голяма вероятност нещо друго в системата вече да е свързано към порт 80.   -  person Marko Topolnik    schedule 04.05.2012
comment
Може би друга услуга вече работи на този порт   -  person juergen d    schedule 04.05.2012
comment
Първото нещо, което трябва да направите: погледнете регистрационните файлове (в директорията tomcat/logs)   -  person Denys Séguret    schedule 04.05.2012
comment
Бих искал да проверя дневника, няма такъв в /etc/tomcat6, къде най-вероятно ще бъде папката с дневника?   -  person Dominik    schedule 04.05.2012
comment
@Jack Murphy: (не е отговор, оттук и коментарът) колкото си струва, никога не съм стартирал Tomcat като root, нито sudo'ed или нещо подобно. Всъщност на Linux дори не инсталирам Java като root: инсталирам Java в потребителски акаунт, като използвам само привилегиите на този потребител. След това стартирам Tomcat на портове 8080 / 8443. Системата обаче е конфигурирана (като root) за прозрачно пренасочване на порт 80 към 8080 и т.н. (използвайки iptables).   -  person TacticalCoder    schedule 21.07.2012
comment
Възможен дубликат: stackoverflow.com/questions/12464926/   -  person amos    schedule 01.09.2014


Отговори (7)


отидете на /etc/default/tomcat6 и променете #AUTHBIND=no на AUTHBIND=yes

 # If you run Tomcat on port numbers that are all higher than 1023, then you
 # do not need authbind.  It is used for binding Tomcat to lower port numbers.
 # NOTE: authbind works only with IPv4.  Do not enable it when using IPv6.
 # (yes/no, default: no)
 #AUTHBIND=no
person Dominik    schedule 04.05.2012
comment
вижте също thelowedown .wordpress.com/2010/08/17/ - person Dominik; 04.05.2012

Две типични причини:

  • Възможно е да нямате разрешение да слушате порт по-нисък от 1024 (обикновено изисква администраторски привилегии, напр. да сте root)
  • Нещо друго може вече да слуша на порт 80 (напр. apache)
person Jon Skeet    schedule 04.05.2012
comment
@Romain: Добре, root или подобен привилегирован акаунт. Редактирах за изясняване. Вярвам, че 1024 би било добре (т.е. това са само 0-1023, които изискват привилегия, но може и да греша) - person Jon Skeet; 04.05.2012
comment
Нищо друго не слуша на порт 80. Аз съм root, но го изпълнявам с /etc/init.d/tomcat6 start - person Dominik; 04.05.2012

Ако нищо от коментираното преди не работи (както се случи с мен), можете да насочите трафика от порт 80 към 8080.

To do it:

http://forum.slicehost.com/index.php?p=/discussion/2497/iptables-redirect-port-80-to-port-8080/p1

Накратко, въведете тези три команди в терминал:

$ sudo iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
$ sudo iptables -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT
$ sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 
person Jesus    schedule 09.04.2013
comment
това ще бъде само краен случай, както споменахте, ако нищо от коментираното преди не работи. - person emecas; 09.04.2013
comment
Други читатели виждат нещо, което аз пропускам: * Това е просто и постига целта, без да се налага да инсталирате и администрирате authbind. * Tomcat слуша на портовете с малък номер. * Tomcat работи като непривилегирован потребител. Защо това е крайно решение? - person rich p; 26.09.2014
comment
Това решение не е чудесно, защото крайният потребител ще види номера на порта в своя URL адрес и ще види промяна на URL адреса. - person alexk; 26.02.2016
comment
@alexk Нямам проблем с промяната на URL адреса с това решение - знам, че това е наистина стара тема. - person Gonza; 13.09.2019

Стартирахте ли Tomcat на порт 80 като root? Трябва да сте root, за да се свържете към портове ‹= 1024 в Linux.

person rooftop    schedule 04.05.2012
comment
Заслужава да се отбележи: стартирането на Tomcat като root обикновено е лоша идея от гледна точка на сигурността, освен ако не е в състояние (и конфигуриран) да превключи потребителя си към непривилегирован потребител след обвързване (което не беше възможно последния път, когато проверих). - person Romain; 04.05.2012
comment
Стартирах Tomcat с помощта на /etc/init.d/tomcat6 start, влязъл с root акаунт. Мога ли да го модифицирам, за да мога да го стартирам под порт 80? - person Dominik; 04.05.2012
comment
Конфигурационните файлове на tomcat са това, което определя кой порт да се използва, как стартирате процеса няма особено значение. Вероятно или имате нещо друго, което слуша на порт 80. Опитайте да стартирате: netstat -an | grep 80 Това ще ви уведоми дали нещо вече слуша на порт 80. - person rooftop; 04.05.2012
comment
@Romain кой според вас е най-добрият начин да направите Tomcat достъпен на порт 80? Инсталирайте и Apache httpd сървър, и Tomcat и след това използвайте Apache httpd сървър за прокси към Tomcat с помощта на mod_proxy? - person Arya; 07.11.2017
comment
@arya Pues така - Tomcat + някакъв обратен прокси (Apache, Nginx, каквото най-добре отговаря на вашия случай на употреба) - person Romain; 15.02.2018

Стартирайте стартиращия си скрипт като root след промяна на обвързването.

sudo ./<path to tomcat bin director>/startup.sh
person Arvind Sridharan    schedule 18.10.2013
comment
Перфектно решение, спаси ми деня - person Mohan Seth; 30.07.2016
comment
Правилен отговор за *nix, но какво да кажем за Windows? - person Koray Tugay; 30.10.2016

спрете услугата Apache и след това стартирайте tomcat, трябва да сте добре, по подразбиране Apache работи на порт 80

person Satya    schedule 04.05.2012
comment
Какво ще кажете за факта, че портове ‹= 1024 са привилегировани? - person Romain; 04.05.2012
comment
Нищо в ОП не споменава това. Не трябва да предполагате. - person Romain; 04.05.2012
comment
Почти съм сигурен, че нищо не работи на 80, тъй като това е основен debian с инсталиран само SSH, добавих java и tomcat с apt-get. - person Dominik; 04.05.2012
comment
На порт 80 не работи нито Apache, нито нещо друго - person Dominik; 04.05.2012

Можете да използвате authbind/privbind или възможности за свързване към порт 80.

person user1462586    schedule 27.06.2014