2015-11-14 94 views
8

我無法啓動端口80上的應用程序。 我已經嘗試在本地計算機上的IDE和服務器上,沒有運氣。我檢查了其他類似的帖子,並確保我使用root在服務器上運行jar。在端口80上的Spring Boot運行應用程序

這是錯誤:

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

在什麼平臺上?另見[這個答案](http://stackoverflow.com/a/414258/2970947)。 –

回答

18

在1024以下的Linux端口只能由根被打開,所以80端口被限制默認

如果你想在80端口上發佈你的應用程序,你需要將請求從端口80重定向到你要運行你的端口pringapp(如8080)端口

可以使用的Apache2服務器至極默認情況下,允許端口80上的工作,可以爲你的tomcat

爲Debian

apt-get install apache2 

a2enmod proxy 
a2enmod proxy_http 


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

ProxyPreserveHost On 

... 

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

服務的Apache2示例配置轉發請求重新啓動

或用iptables的重定向

的iptables -t NAT -A PREROUTING -p tcp的--dport 80 -j REDIRECT --to-POR牛逼8080

,如果你需要使用本地主機還添加此

iptables的NAT -t -I OUTPUT -p tcp的-d 127.0.0.1 --dport 80 -j REDIRECT --to端口8080

+1

感謝iptables解決方案。 – heroin

3

剛遇到這個問題。我在Ubuntu AWS實例上運行Spring Boot應用程序。

java -jar app.jar --server.port=80會給我一個錯誤,就像你所描述的。解決方案,因爲1024以下的端口只能由root打開,所以添加「sudo」。 sudo java -jar app.jar --server.port=80

感謝鼓舞我:D

相關問題