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.
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
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
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
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