Porta de configuração do Tomcat8 para 80

Porta de configuração do Tomcat8 para 80

Eu segui issohttp://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 o tomcat em um VPS, versão 8.0.20...

Estou tentando mudar a porta para 80 mas não tem como fazer isso, tentei:

http://beginlinux.com/server/ubuntu/mudar-a-porta-on-tomcat

mas parece não funcionar, recebendo este erro de catalina.out dentro dos logs:

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

Esta é a porta do meu conector, o que há de errado com ela?

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

Responder1

Você precisará executar o Tomcat como root para que ele possa se vincular à porta 80. Todas as portas abaixo de 1024 requerem permissões de superusuário para ligação.

Isto também é o que a última exceção no stacktrace tenta lhe dizer:

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

Um breve aviso, sem que isso se torne uma discussão extensa sobre segurança: do ponto de vista da segurança, geralmente não é uma boa ideia executar o Tomcat (ou possivelmente qualquer aplicativo Java) com permissões de superusuário. Bugs em um aplicativo da web hospedado no Tomcat podem levar à execução arbitrária de código com essas permissões, possivelmente dando a um invasor remoto acesso root ao sistema.

A porta padrão do Tomcat é a 8080 sem privilégios por esse motivo (entre outros). Ele não requer permissões de superusuário para vincular-se e, portanto, o Tomcat pode ser executado como um usuário comum do sistema.

Se você realmente precisa acessar o aplicativo web hospedado pelo Tomcat através da porta 80, você deve frontar a instância do Tomcat com um servidor web como o Apache. Ele escuta na porta 80 e faz proxy reverso da solicitação para o Tomcat. Isso é mais seguro, até porque o Apache elimina seus privilégios de superusuário após vincular à porta 80.

Uma configuração de host virtual Apache que faz isso poderia ser assim:

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

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

informação relacionada