如何使码头服务器可以从局域网访问?

2022-09-04 02:13:56

我正在尝试使用 192.168.0.6:8080(A 的 IP)从 LAN 上的另一台计算机 (B) 访问 Web 应用(部署在我的计算机 (A) 上的 jetty8 中),但它不起作用。虽然我可以从A访问在计算机B上的AppServ上托管的应用程序,但通常使用192.168.0.5(B的IP)。

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

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

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


答案 1

以下答案适用于 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(本地主机)您可以在计算机 A 上查看日志,或者只是执行快速测试。打开 Web 浏览器并测试这两个 URL

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

如果它在两个URL上都响应,那么您可能已经正确设置了它,并且需要处理防火墙问题。如果它适用于一个,但不适用于另一个,那么您只能在1个接口上收听。

要让码头侦听所有接口,请使用特殊的 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>
      ...

答案 2

2020-07-20

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

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);

推荐