2012-05-04 14 views
16

Uruchomiłem i przetestowałem Tomcat w Port 8080 (domyślnie). Teraz zmieniłem port złącza na 80 i ponownie uruchomiłem Tomcat, nic nie pojawi się w mojej minimalnej instalacji Debian 6.0. Gdzie jest tutaj ta sztuczka?Dlaczego Tomcat działa z portem 8080, ale nie z 80?

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

Czy dostajesz BindException, być może, w catalina.out? Jest spora szansa, że ​​coś innego w systemie jest już związane z portem 80. –

+0

Może inna usługa działa na tym porcie już –

+1

Pierwsza rzecz: spójrz na logi (w katalogu tomcat/logs) –

Odpowiedz

31

przejść do/etc/default/tomcat6 i zmienić #AUTHBIND=no do 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 
+0

zobacz także http://thelowedown.wordpress.com/2010/08/17/tomcat-6-binding-to-a-privileged-port-on-debianubuntu/ –

9

Czy uruchomiłeś Tomcat na porcie 80 jako root? Musisz być rootem, aby związać się z portami < = 1024 w systemie Linux.

+6

Warto zauważyć: uruchomienie Tomcat jako "root" jest generalnie złym pomysłem, bezpieczeństwo -wise, chyba że jest w stanie (i skonfigurował), aby po jego powiązaniu przełączyć użytkownika na nieuprzywilejowanego użytkownika (co nie było możliwe, kiedy ostatnio sprawdzałem). – Romain

+0

Uruchomiłem Tomcat przy użyciu /etc/init.d/tomcat6 startu zalogowałem się na konto root. Czy mogę go zmodyfikować, aby móc go uruchomić pod portem 80? –

+1

Pliki konfiguracyjne tomcat określają, który port do użycia, jak rozpocząć proces, nie ma znaczenia. Prawdopodobnie masz coś innego, co nasłuchuje na porcie 80.Spróbuj uruchomić: netstat -an | grep 80 Dzięki temu dowiesz się, czy coś już nas podsłuchuje na porcie 80. – rooftop

0

stop apache, a następnie uruchomić tomcat powinno być dobrze, domyślnie Apache jest uruchomiony na porcie 80

+0

Co z tym, że porty <= 1024 są uprzywilejowane? – Romain

+0

Wierzę, że ma już korzeń – Satya

+2

Nic w PO nie wspomina o tym. Nie powinieneś zakładać. – Romain

11

dwóch typowych powodów:

  • Ty być może nie masz uprawnień do słuchania portów niższe niż 1024 (zazwyczaj wymaga uprawnień administracyjnych, na przykład będąc root)
  • Coś innego może być już nasłuchuje na porcie 80 (np apache)
+1

@Romain: Cóż, root lub podobnie uprzywilejowane konto. Zmieniono, aby wyjaśnić. Wierzę, że * 1024 byłoby w porządku (tj. To tylko 0-1023, które wymagają przywilejów, ale mógłbym się mylić) –

+0

Nic więcej nie słucha na porcie 80. Jestem rootem, ale wykonuję go z /etc/init.d/ tomcat6 start –

8

Jeśli nic komentowane przed dzieł (jak to się stało do mnie), można skierować ruch z portu 80 do 8080.

Aby to zrobić:

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

W skrócie, należy wpisać trzy polecenia w terminalu:

$ 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 
+0

to będzie tylko skrajny przypadek, jak ty wspomniałem "Jeśli nic z komentowanych wcześniej nie zadziałało". – emecas

+0

Inni czytelnicy widzą coś, czego mi brakuje: * Jest to proste i osiąga cel bez konieczności instalowania i administrowania 'authbind'. * Tomcat nasłuchuje na portach o małej liczbie. * Tomcat działa jako nieuprzywilejowany użytkownik. Dlaczego to jest rozwiązanie skrajnego przypadku? –

+0

To rozwiązanie nie jest wspaniałe, ponieważ użytkownik końcowy zobaczy numer portu w adresie URL i zobaczy zmianę adresu URL. – alexk

2

Uruchom skrypt startowy jako root po zmianie wiązania.

sudo ./<path to tomcat bin director>/startup.sh 
+0

Idealne rozwiązanie, zapisane mój dzień –

+0

Prawidłowa odpowiedź dla * nix, ale co z Windows? –

0

Można użyć authbind/privbind lub zdolności do wiązania się z portu 80.

Powiązane problemy