如何使jetty服务器可以从局域网访问



我正试图使用192.168.0.6:8080(a的IP)从局域网上的另一台机器(B)访问一个web应用程序(部署在我的机器(a)上的jetty8中),但它不起作用。而我可以从A正常使用192.168.0.5(B的IP)访问机器B上AppServ上托管的应用程序。

我可以在机器A上的localhost:8080上正常访问该应用程序。

我可以保证没有网络问题,但由于某种原因,无法通过网络访问码头。是否有任何特定的配置可以通过局域网访问?

我的应用程序是Maven项目,我从eclipse运行它,设置在web.xml和pom.xml中

以下答案适用于Jetty 8及更早版本(Jetty 9+命令和类名不同)

确保你检查了你正在监听的接口。

示例(来自日志)

2012-08-10 14:52:26.470:INFO:oejs.AbstractConnector:Started SelectChannelConnector@127.0.0.1:8080

这表示服务器仅在127.0.0.1(localhost)上侦听在机器a上,您可以查看日志,也可以进行快速测试。打开web浏览器并测试这两个URL

  • http://localhost:8080/
  • http://192.168.0.6:8080/

如果它在两个URL上都有响应,那么你可能已经正确设置了它,并且需要处理防火墙问题。如果它对其中一个有效,但对另一个无效,那么您只在1个接口上侦听。

要在所有接口上进行jetty侦听,请使用特殊的IP 0.0.0.0

$ java -Djetty.host=0.0.0.0 -jar start.jar
2012-08-10 14:53:25.338:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080

此时,jetty正在监听您机器上的所有接口。

注意:您还可以编辑etc/jetty.xml并永久设置主机。

      <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
        <Set name="host">0.0.0.0</Set>
      ...

2020-07-20

作为@JoakimErdfelt答案的补充,在Jetty 9.4.12v20180830(及以上版本)上,您可以以程序方式将主机配置为:

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
    Server server = new Server();       
    ServerConnector httpConnector = new ServerConnector(server);
        httpConnector.setHost("0.0.0.0"); // <--------- !
        httpConnector.setPort(12345);
        httpConnector.setIdleTimeout(5000);
        server.addConnector(httpConnector);

所以我遇到了这个问题,在调试了一下午的奇怪行为后,我发现Jetty只向IPv6广播,跳过IPv4,v4端口被分配给了另一个应用程序。

我的解决方案?跳转到另一个端口…

最新更新