Java-Webanwendung mit Tomcat auf Port 80 ausliefern

Ich arbeite ja ganz gerne mit der JiffyBox und der aktuellsten Ubuntu Langzeit-Support Version (Precise Pangolin – 12.04 LTS). Wenn man eine Java-Webanwendung mit Tomcat auf dem Standardport für Webserver (Port 80) bereitstellen möchte, gibt es dafür verschiedene Wege.

Die schnellste Möglichkeit könnte es sein, Tomcat per apt-get zu installieren und in der server.xml den Tomcat-Standardport von 8080 auf 80 zu ändern. Allerdings wird dann beim Starten des Servers ein Fehler auftreten. Schließlich werden Root-Rechte benötigt, um einen der ersten 1024 Ports zu reservieren:

Jan 22, 2013 11:53:51 PM org.apache.coyote.http11.Http11Protocol init
SEVERE: Error initializing endpoint
java.net.BindException: Permission denied <null>:80
        at org.apache.tomcat.util.net.JIoEndpoint.init(JIoEndpoint.java:549)
        at org.apache.coyote.http11.Http11Protocol.init(Http11Protocol.java:176)
        at org.apache.catalina.connector.Connector.initialize(Connector.java:1049)
        at org.apache.catalina.core.StandardService.initialize(StandardService.java:703)
        at org.apache.catalina.core.StandardServer.initialize(StandardServer.java:838)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:538)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:562)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:261)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: java.net.BindException: Permission denied
        at java.net.PlainSocketImpl.socketBind(Native Method)
        at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:353)
        at java.net.ServerSocket.bind(ServerSocket.java:336)
        at java.net.ServerSocket.<init>(ServerSocket.java:202)
        at java.net.ServerSocket.<init>(ServerSocket.java:158)
        at org.apache.tomcat.util.net.DefaultServerSocketFactory.createSocket(DefaultServerSocketFactory.java:50)
        at org.apache.tomcat.util.net.JIoEndpoint.init(JIoEndpoint.java:538)
        ... 12 more
Jan 22, 2013 11:53:51 PM org.apache.catalina.core.StandardService initialize
SEVERE: Failed to initialize connector [Connector[HTTP/1.1-80]]
LifecycleException:  Protocol handler initialization failed: java.net.BindException: Permission denied <null>:80
        at org.apache.catalina.connector.Connector.initialize(Connector.java:1051)
        at org.apache.catalina.core.StandardService.initialize(StandardService.java:703)
        at org.apache.catalina.core.StandardServer.initialize(StandardServer.java:838)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:538)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:562)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:261)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Jan 22, 2013 11:53:51 PM org.apache.catalina.startup.Catalina load

Natürlich gibt es viele Möglichkeiten, das Problem anzugehen. Hier jetzt eine dreckige und eine saubere Lösung:

  1. Schnell und unsicher (einfach dreckig): Eigenen Tomcat-Server installieren und als Root starten
  2. Aufwendiger und sicher (schöööön sauber): Standard Apache-Server und Tomcat installieren und per AJP (Apache JServ Protocol) miteinander verbinden

Weiterlesen

JiffyBox mit Apache über neue Domain nutzen

Für ein Projekt benötige ich einen Ubuntu-Server mit Apache, der über eine Top-Level-Domain erreichbar sein soll. Normalerweise hätte ich den bei einem der üblichen Webhoster bestellt, aber ein Bekannter meinte: „Nimm dir doch lieber einen Cloud-Anbieter – wie Amazon. Damit bist du doch viel flexibler !“.  Also habe ich mal ein bisschen gesucht und bin auf die JiffyBox (CloudServer On Demand) von domainFACTORY gestoßen. Genau das Richtige für mich:

  • keine festen monatlichen Kosten, sondern bedarfsgerechte Abrechnungen
  • günstigstes Angebot mit 1 GB Arbeitsspeicher und 50 GB Festplatte für 0,02 Euro pro Stunde (weniger als 15 Euro pro Monat)
  • keine langfristigen Vertragsbindungen
  • einfaches Erstellen, Sichern, Duplizieren, Einfrieren und Löschen von JiffyBoxen
  • Datencenter in Deutschland – Amazon scheidet für mich aus datenschutzrechtlichen Gründen aus

Weiterlesen