web-dev-qa-db-ja.com

外部IPアドレスからWebサーバーへのアクセスを許可するためにスプリングブートをセットアップする方法

spring-boot内でTomcatをセットアップして、外部IPアドレスからのアクセスを許可する方法を検討しています。現在、locahost:portからUIを表示できますが、他のシステムからはアクセスできません。

http://localhost:8081 

ローカルコンピューターにログインすると動作します。

http://192.168.0.93:8081

ローカルコンピューターにログインして http://192.168.0.93:8081 を試しても動作しません。

動作しないIPアドレスを介して別のコンピューターからUIにアクセスしたい。

http://192.168.0.93:8081

springsドキュメントに到達したとき、Tomcatがserver.addressを使用するためにWebサーバーを設定するIPアドレスを追加できることがわかりました。これにより、外部システムからこのIPアドレスを介してサーバーにアクセスできるようになります。

server.port=8082
server.address=192.168.0.93

アドレスを指定しなくてもポートは正常に機能しますが、アドレスを指定して実行しようとすると、そのアドレスへのバインドに関する問題が発生します。 spring-bootはすでにlocahost:8082を割り当てているようです。

質問:

Tomactが外部アドレスからアクセスできるようにspring-bootを正しくセットアップし、ローカルにアクセスしたときに自身のIPを認識するにはどうすればよいですか?

ありがとうございました

スタックトレース:

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

ソリューション

以下の回答をご覧ください

12
ALM

非常に多くの人がこの質問を見てきました。解決策は、ホスティングCentOSマシンでファイアウォールが正しく構成されていることを確認し、サーバーアドレスを明示的に設定しないことでした。

間違った設定

この失敗以前はファイアウォールが正しくセットアップされていませんでした

server.port=8081
server.address=192.168.0.93

ファイアウォールが正しく設定されたらserver.addressをポートだけで指定する必要はありません

正しいセットアップ

server.port=8081

これにより、IPを使用して他のシステムからアプリケーションに正しくアクセスできました。

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

ありがとう、あなたは私をたくさん救った!コメントでこれを投稿したかったのですが、返信するのに十分な評判がありません。

ファイアウォールの変更に関する情報が必要な方は、

Firewalldを使用して、vm(centos7)にspringboot webserverポートを追加しました

私のウェブサーバーは8080を使用していたので、私はしました:

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

Sudo systemctl restart firewalld*

firewalldを再起動/リロードして、変更を適用する必要があります。もし、あんたが、

Sudo firewall-cmd --list-all*

発見できる 8080/tcpがポートリストに追加されました

0
Minjeong Choi