2015-11-14 16 views
8

Non posso avviare l'applicazione sulla porta 80. ho provato su computer locale su IDE e su server, senza fortuna. Ho controllato gli altri post simili e mi assicuro di eseguire jar sul server con root.Spring Boot in esecuzione app sulla porta 80

questo è l'errore:

till here all ok 
... 
java.net.SocketException: Permission denied 
at sun.nio.ch.Net.bind0(Native Method) 
at sun.nio.ch.Net.bind(Net.java:433) 
at sun.nio.ch.Net.bind(Net.java:425) 
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) 
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) 
at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:338) 
at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:760) 
at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:472) 
at org.apache.catalina.connector.Connector.startInternal(Connector.java:986) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
at org.apache.catalina.core.StandardService.addConnector(StandardService.java:237) 
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.addPreviouslyRemovedConnectors(TomcatEmbeddedServletContainer.java:186) 
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.start(TomcatEmbeddedServletContainer.java:149) 
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.startEmbeddedServletContainer(EmbeddedWebApplicationContext.java:288) 
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:141) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:483) 
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) 
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686) 
at org.springframework.boot.SpringApplication.run(SpringApplication.java:320) 
at org.springframework.boot.SpringApplication.run(SpringApplication.java:957) 
at org.springframework.boot.SpringApplication.run(SpringApplication.java:946) 
at com.andirod.StartApplication.main(StartApplication.java:20) 
... 
... 
... 
Exception in thread "main" java.lang.IllegalStateException: Tomcat connector in failed state 
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.start(TomcatEmbeddedServletContainer.java:157) 
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.startEmbeddedServletContainer(EmbeddedWebApplicationContext.java:288) 
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:141) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:483) 
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) 
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686) 
at org.springframework.boot.SpringApplication.run(SpringApplication.java:320) 
at org.springframework.boot.SpringApplication.run(SpringApplication.java:957) 
at org.springframework.boot.SpringApplication.run(SpringApplication.java:946) 
at com.andirod.StartApplication.main(StartApplication.java:20) 
+0

Su quale piattaforma? Vedi anche [questa risposta] (http://stackoverflow.com/a/414258/2970947). –

risposta

18

Sulle porte Linux inferiori alla 1024 può essere aperto solo da root, quindi la porta 80 è limitato dal default

se si desidera pubblicare la propria app su 80 porte è necessario reindirizzare la richiesta dalla porta 80 alla porta su cui si eseguirà la s pringapp (ad esempio, 8080) porta

è possibile utilizzare wich server di apache2 è consentito per impostazione predefinita per lavorare sulla porta 80 e possono inoltrare le richieste per voi di Tomcat

configurazione di esempio per Debian

apt-get install apache2 

a2enmod proxy 
a2enmod proxy_http 


cd /etc/apache2/sites-enabled 
<VIRTUALHOST.*> 

ProxyPreserveHost On 

... 

ProxyPass/http://localhost:8080/ 
</VIRTUALHOST> 

servizio apache2 riavviare

o utilizzare iptables per i reindirizzamenti

iptables -t nat -A PREROUTING p tcp --dport 80 -j rEDIRECT --to-por t 8080

se è necessario utilizzare localhost anche aggiungere questo

iptables -t nat tcp USCITA -I -p -d 127.0.0.1 --dport 80 -j REDIRECT --to-porte 8080

+1

Grazie per la soluzione iptables. – heroin

3

Appena incontrato questo problema. Sto eseguendo un'applicazione Spring Boot su un'istanza AWS di Ubuntu.

java -jar app.jar --server.port=80 mi darà un errore proprio come hai descritto. La soluzione, beh, dal momento che le porte inferiori a 1024 possono essere aperte solo da root, aggiungere "sudo". sudo java -jar app.jar --server.port=80.

Grazie per avermi ispirato: D

Problemi correlati