Tomcat 服务器无法“在外部”工作

Posted

技术标签:

【中文标题】Tomcat 服务器无法“在外部”工作【英文标题】:Tomcat server not working "externally" 【发布时间】:2015-07-05 06:55:05 【问题描述】:

我已经设置了我的 tomcat 服务器,它可以在 LOCAL-HOST 上运行,但是我不能在外部运行它。我必须更改一些设置吗? 我尝试了所有方法,但它似乎在其他地方不起作用......这很奇怪,因为它在本地主机上工作得非常好。

【问题讨论】:

您将提供更多信息。为什么不能在外部运行?有错误信息吗? “外部”实际上是什么意思?只是 tomcat 有问题,还是您编写的网络应用程序? 当我对外说时,我的意思是像在其他机器上一样...... 好吧,您仍然没有提供任何详细信息,例如错误消息等,但我要冒昧地说您的 tomcat 只在 localhost 而不是网络 IP 上侦听。检查 server.xml 中的“地址”设置并使用主机名或 0.0.0.0,类似于:***.com/questions/6246127/… 好吧,假设 tomcat 在默认配置下运行或多或少,让它在远程主机上运行应该没什么大不了的。也可能是拒绝访问的目标主机的防火墙。检查 Tomcat 使用的端口(默认 8080)是否在远程主机上开放访问? @stringy05 如果我第一次做 spring/tomcast,我只有 pom.xml ...我没有看到 server.xml ...并且没有错误。这就是我所做的“mvn spring-boot:run”,然后当我执行localhost:8080 时,它可以工作,但现在当我在另一台我的服务器未运行的机器上使用我的服务器的计算机 IP 并执行 https :xxx.xxx.xxx.:8080 ,这应该可以工作,但页面甚至没有加载 【参考方案1】:

因此,您在 spring boot 应用程序中运行 tomcat,从 maven spring boot 插件开始,它在 localhost 上侦听,但无法使用您的 LAN IP 地址访问。

请注意 - SO 上的人们很乐意提供帮助,但获取必要信息不应该是寻宝。

第一

查看tomcat监听的是哪个IP地址和端口:spring boot log通常会告诉你主机名,例如mymac.local,端口会显示出来,端口:8080 (http),:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.2.3.RELEASE)


2015-04-29 09:14:33.269  INFO 7031 --- [main] hello.Application  Starting Application v0.1.0 on mymac.local with PID 7031 (/Users/foo/Development/java/springframework/gs-spring-boot/complete/target/gs-spring-boot-0.1.0.jar started by foo in /Users/foo/Development/java/springframework/gs-spring-boot/complete)
2015-04-29 09:14:35.072  INFO 7031 --- [main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2015-04-29 09:14:35.506  INFO 7031 --- [main] o.apache.catalina.core.StandardService   : Starting service Tomcat
2015-04-29 09:14:35.507  INFO 7031 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.0.20

并且作为一项规则,tomcat 开始侦听所有 IP 地址 (0.0.0.0),所以很奇怪这对您不起作用。

另一种方法是使用netstat。对于 Max/Linux:

$ netstat -an  | grep 8080
tcp46      0      0  *.8080                 *.*                    LISTEN     

在窗户上

C:\> netstat -an | find "8080"    
  TCP    0.0.0.0:8080            0.0.0.0:0              LISTENING
  TCP    [::]:8080               [::]:0                 LISTENING

如果您的应用正在侦听 0.0.0.0 或像 192.168.0.100 之类的真实 IP,那么您可能会以某种方式在网络上被防火墙或阻止。

如果您的应用仅在 localhost/127.0.0.1 上侦听,那么您需要告诉 tomcat 使用真实 IP,例如这个问题: How to configure embedded Tomcat integrated with Spring to listen requests to IP address, besides localhost?

其次 使用 curl/telnet/netcat 等简单客户端进行基本连接。浏览器,尤其是 IE,可能会受到诸如 Windows 组策略之类的限制,这将阻止许多事情在很少或没有信息的情况下工作。

所以在另一台机器上,看看你是否可以telnet到tomcat端口(假设tomcat在192.168.0.100上运行):

$ telnet 192.168.0.100 8080
Trying 192.168.0.100...
Connected to localhost.
Escape character is '^]'.

如果您看到 已连接 消息,则说明您已连接,因此如果在浏览器中无法正常工作,则说明存在其他问题。

如果立即被拒绝,则两台计算机之间没有路由/连接。这通常意味着你的 tomcat 没有监听正确的 IP 地址

$ telnet 192.168.0.100 8080
Trying  192.168.0.100...
telnet: connect to address  192.168.0.100: Connection refused
telnet: Unable to connect to remote host

如果它只是挂在连接消息上,那么它可能是防火墙。

$ telnet 192.168.0.100 8080
Trying 192.168.0.100...

【讨论】:

以上是关于Tomcat 服务器无法“在外部”工作的主要内容,如果未能解决你的问题,请参考以下文章

无法在外部 tomcat 上部署 Spring Boot 应用程序

在外部 tomcat 中定义 Spring Boot 应用程序的上下文路径

在外部 Tomcat 服务器上运行的 Springboot 在除 index.html 之外的所有内容上都会出现错误 404

将eclipse中的project配置到Tomcat

jQuery AJAX 在外部 URL 上注入时无法工作?

如何在外部 COM 调用期间抑制“此操作无法完成”消息?