web-dev-qa-db-fra.com

Comment configurer spring-boot pour permettre l'accès au serveur Web à partir d'adresses IP externes

J'ai cherché à configurer tomact dans spring-boot pour permettre un accès depuis des adresses IP externes. Actuellement, je peux voir l'interface utilisateur de locahost: port mais je ne peux pas y accéder depuis d'autres systèmes.

http://localhost:8081 

Lorsque je suis connecté à l'ordinateur local, cela fonctionne.

http://192.168.0.93:8081

Lorsque je suis connecté à l'ordinateur local et essayez http://192.168.0.93:8081 cela ne fonctionne pas. 

Je veux accéder à l'interface utilisateur à partir d'un autre ordinateur via son adresse IP, cela ne fonctionne pas.

http://192.168.0.93:8081

Quand j’ai eu connaissance de la documentation springs, j’ai trouvé que vous pouviez ajouter l’adresse IP sur laquelle vous voulez que Tomcat définisse le serveur Web pour utiliser server.address. Cela devrait ensuite permettre au serveur d’être accessible via cette adresse IP par des systèmes extérieurs.

server.port=8082
server.address=192.168.0.93

Le port fonctionne bien si je ne fournis pas l'adresse, mais lorsque je fournis l'adresse et que je tente de l'exécuter, je rencontre un problème de liaison à cette adresse. Il semble que spring-boot ait déjà attribué locahost: 8082. 

Question:

Comment configurer correctement spring-boot pour permettre à tomact d'être accédé par des adresses extérieures et reconnaître sa propre adresse IP lors d'un accès local?

Je vous remercie

Trace de la pile:

Java.net.BindException: Cannot assign requested address
  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:340)
  at org.Apache.Tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.Java:765)
  at org.Apache.coyote.AbstractProtocol.start(AbstractProtocol.Java:473)
  at org.Apache.catalina.connector.Connector.startInternal(Connector.Java:986)
  at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:147)
  at org.Apache.catalina.core.StandardService.addConnector(StandardService.Java:239)
  at org.springframework.boot.context.embedded.Tomcat.TomcatEmbeddedServletContainer.addPreviouslyRemovedConnectors(TomcatEmbeddedServletContainer.Java:194)
  at org.springframework.boot.context.embedded.Tomcat.TomcatEmbeddedServletContainer.start(TomcatEmbeddedServletContainer.Java:151)
  at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.startEmbeddedServletContainer(EmbeddedWebApplicationContext.Java:293)
  at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.Java:141)
  at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.Java:541)
  at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.Java:118)
  at org.springframework.boot.SpringApplication.refresh(SpringApplication.Java:766)
  at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.Java:361)
  at org.springframework.boot.SpringApplication.run(SpringApplication.Java:307)
  at org.springframework.boot.SpringApplication.run(SpringApplication.Java:1191)
  at org.springframework.boot.SpringApplication.run(SpringApplication.Java:1180)
  at com.miw.mcb.server.ReactAndSpringDataRestApplication.main(ReactAndSpringDataRestApplication.Java:18)
  at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
  at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
  at Java.lang.reflect.Method.invoke(Method.Java:498)
  at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run(AbstractRunMojo.Java:478)
  at Java.lang.Thread.run(Thread.Java:745)
2016-05-25 11:24:30 - Failed to start connector [Connector[HTTP/1.1-8081]]
org.Apache.catalina.LifecycleException: Failed to start component [Connector[HTTP/1.1-8081]]
  at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:153)
  at org.Apache.catalina.core.StandardService.addConnector(StandardService.Java:239)
  at org.springframework.boot.context.embedded.Tomcat.TomcatEmbeddedServletContainer.addPreviouslyRemovedConnectors(TomcatEmbeddedServletContainer.Java:194)
  at org.springframework.boot.context.embedded.Tomcat.TomcatEmbeddedServletContainer.start(TomcatEmbeddedServletContainer.Java:151)
  at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.startEmbeddedServletContainer(EmbeddedWebApplicationContext.Java:293)
  at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.Java:141)
  at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.Java:541)
  at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.Java:118)
  at org.springframework.boot.SpringApplication.refresh(SpringApplication.Java:766)
  at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.Java:361)
  at org.springframework.boot.SpringApplication.run(SpringApplication.Java:307)
  at org.springframework.boot.SpringApplication.run(SpringApplication.Java:1191)
  at org.springframework.boot.SpringApplication.run(SpringApplication.Java:1180)
  at com.miw.mcb.server.ReactAndSpringDataRestApplication.main(ReactAndSpringDataRestApplication.Java:18)
  at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
  at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
  at Java.lang.reflect.Method.invoke(Method.Java:498)
  at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run(AbstractRunMojo.Java:478)
  at Java.lang.Thread.run(Thread.Java:745)
Caused by: org.Apache.catalina.LifecycleException: service.getName(): "Tomcat";  Protocol handler start failed
  at org.Apache.catalina.connector.Connector.startInternal(Connector.Java:993)
  at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:147)
  ... 19 common frames omitted
Caused by: Java.net.BindException: Cannot assign requested address
  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:340)
  at org.Apache.Tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.Java:765)
  at org.Apache.coyote.AbstractProtocol.start(AbstractProtocol.Java:473)
  at org.Apache.catalina.connector.Connector.startInternal(Connector.Java:986)
  ... 20 common frames omitted
2016-05-25 11:24:30 - Pausing ProtocolHandler ["http-nio-192.168.0.93-8081"]
2016-05-25 11:24:30 - Stopping service Tomcat
2016-05-25 11:24:30 - The stop() method was called on component [StandardServer[-1]] after stop() had already been called. The second call will be ignored.
2016-05-25 11:24:30 - Stopping ProtocolHandler ["http-nio-192.168.0.93-8081"]
2016-05-25 11:24:30 - Destroying ProtocolHandler ["http-nio-192.168.0.93-8081"]
2016-05-25 11:24:30 - Application startup failed
org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat servlet container
  at org.springframework.boot.context.embedded.Tomcat.TomcatEmbeddedServletContainer.start(TomcatEmbeddedServletContainer.Java:165)
  at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.startEmbeddedServletContainer(EmbeddedWebApplicationContext.Java:293)
  at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.Java:141)
  at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.Java:541)
  at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.Java:118)
  at org.springframework.boot.SpringApplication.refresh(SpringApplication.Java:766)
  at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.Java:361)
  at org.springframework.boot.SpringApplication.run(SpringApplication.Java:307)
  at org.springframework.boot.SpringApplication.run(SpringApplication.Java:1191)
  at org.springframework.boot.SpringApplication.run(SpringApplication.Java:1180)
  at com.miw.mcb.server.ReactAndSpringDataRestApplication.main(ReactAndSpringDataRestApplication.Java:18)
  at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
  at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
  at Java.lang.reflect.Method.invoke(Method.Java:498)
  at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run(AbstractRunMojo.Java:478)
  at Java.lang.Thread.run(Thread.Java:745)
Caused by: Java.lang.IllegalStateException: Tomcat connector in failed state
  at org.springframework.boot.context.embedded.Tomcat.TomcatEmbeddedServletContainer.start(TomcatEmbeddedServletContainer.Java:159)
  ... 16 common frames omitted

Solution

Voir la réponse ci-dessous

11
ALM

Depuis tant de personnes ont vu cette question. La solution consistait à vérifier que le pare-feu était correctement configuré sur la machine CentOS hébergeant et à ne pas définir explicitement l'adresse du serveur. 

CONFIGURATION INCORRECTE

Ceci a échoué avec une configuration incorrecte du pare-feu

server.port=8081
server.address=192.168.0.93

Une fois que le pare-feu est correctement configuré vous n’avez pas besoin de spécifier l’adresse du serveur, mais uniquement le port .

CONFIGURATION CORRECTE

server.port=8081

Cela m'a permis d'accéder correctement à l'application à partir d'autres systèmes utilisant son adresse IP.

http://<someip>:<server.port>
http://192.168.0.93:8081
3
ALM

Merci, vous m'avez sauvé des tonnes! Je voulais poster ceci dans les commentaires, mais je n'ai pas assez de réputation pour répondre. 

Ceux d’entre vous qui veulent des informations sur les modifications du pare-feu, 

J'ai utilisé firewalld pour ajouter mes ports de serveur Web springboot à ma machine virtuelle (centos7).

Mon serveur Web utilisait 8080, alors je l’ai fait: 

firewall-cmd --permanent --reload --zone=public --add-port=8080/tcp*

Sudo systemctl restart firewalld*

vous devez redémarrer/recharger le pare-feu pour appliquer les modifications . si vous, 

Sudo firewall-cmd --list-all*

vous pouvez trouver que 8080/tcp a été ajouté à la liste des ports

0
Minjeong Choi