Puerto de configuración de Tomcat8 a 80

Puerto de configuración de Tomcat8 a 80

Seguí estohttp://www.mogilowski.net/lang/en-us/2014/04/22/install-apache-tomcat-8-on-debian-7-wheezy-with-virtual-hosts-and-apache2-integration/para instalar tomcat en un VPS, versión 8.0.20...

Estoy intentando cambiar el puerto a 80 pero no hay forma de hacerlo, lo he intentado:

http://beginlinux.com/server/ubuntu/changing-the-port-on-tomcat

pero no parece funcionar, aparece este error de catalina.out dentro de los registros:

25-Feb-2015 01:32:23.879 SEVERE [main] org.apache.catalina.core.StandardService.initInternal Failed to initialize connector [Connector[HTTP/1.1-$
org.apache.catalina.LifecycleException: Failed to initialize component [Connector[HTTP/1.1-80]]
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:106)
    at org.apache.catalina.core.StandardService.initInternal(StandardService.java:567)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:851)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:576)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:599)
    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:606)
    at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:310)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:484)
Caused by: org.apache.catalina.LifecycleException: Protocol handler initialization failed
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:962)     
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)                  
    ... 12 more
Caused by: java.net.SocketException: Permission denied
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:444)
    at sun.nio.ch.Net.bind(Net.java:436)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:214)            
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)   
    at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:343)              
    at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:732)
    at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:457)           
    at org.apache.coyote.http11.AbstractHttp11JsseProtocol.init(AbstractHttp11JsseProtocol.java:120)
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:960)
    ... 13 more

Este es mi puerto conector, ¿qué tiene de malo?

<Connector port="80" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="443" />

Respuesta1

Necesitará ejecutar Tomcat como root para poder vincularse al puerto 80. Todos los puertos por debajo de 1024 requieren permisos de superusuario para vincularse.

Esto es también lo que la última excepción en el seguimiento de pila intenta decirle:

Caused by: java.net.SocketException: Permission denied
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:444)
    at sun.nio.ch.Net.bind(Net.java:436)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:214)            
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)   
    at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:343)              
    at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:732)
    at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:457)           
    at org.apache.coyote.http11.AbstractHttp11JsseProtocol.init(AbstractHttp11JsseProtocol.java:120)
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:960)
    ... 13 more

Una breve advertencia, sin que esto se convierta en una discusión extensa sobre seguridad: desde el punto de vista de la seguridad, generalmente no es una buena idea ejecutar Tomcat (o posiblemente cualquier aplicación Java) con permisos de superusuario. Los errores en una aplicación web alojada en Tomcat podrían conducir a la ejecución de código arbitrario con estos permisos, posiblemente dando a un atacante remoto acceso raíz al sistema.

El puerto Tomcat predeterminado es el 8080 sin privilegios por este motivo (entre otros). No requiere permisos de superusuario para vincularse y, por lo tanto, Tomcat se puede ejecutar como un usuario normal del sistema.

Si realmente necesita acceder a la aplicación web alojada en Tomcat a través del puerto 80, debe conectar la instancia de Tomcat a un servidor web como Apache. Escucha en el puerto 80 y realiza un proxy inverso de la solicitud a Tomcat. Esto es más seguro, sobre todo porque Apache pierde sus privilegios de superusuario después de vincularse al puerto 80.

Una configuración de host virtual Apache que haga esto podría verse así:

<VirtualHost *:80>
    ServerAdmin webmaster
    ServerName foo.example.com

    ProxyPreserveHost on
    ProxyRequests off
    ProxyPass        / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
</VirtualHost>

información relacionada