无法访问 Google 云中的 tomcat 管理器 8080

Unable to access tomcat manager 8080 in Google Cloud

我使用 Amazon EC2 运行 我的 Tomcat+MySQL 网站已经有一段时间了,现在正在迁移到 Google 云平台。我启动了一个计算引擎实例 (Ubuntu 16.04),通过 ssh 连接到它并使用 apt-get 安装 mysql/tomcat7。

我遇到的问题是tomcat无法启动。 catalina.out 日志没有 "Server startup at xxxms" 消息,我无法通过浏览器连接到 8080 端口。

catalina.out的最后几行是

Jul 10, 2017 7:06:20 PM org.apache.catalina.startup.Catalina load INFO: Initialization processed in 928 ms
Jul 10, 2017 7:06:20 PM org.apache.catalina.core.StandardService startInternal INFO: Starting service Catalina
Jul 10, 2017 7:06:20 PM org.apache.catalina.core.StandardEngine startInternal INFO: Starting Servlet Engine: Apache Tomcat/7.0.68 (Ubuntu)
Jul 10, 2017 7:06:20 PM org.apache.catalina.startup.HostConfig deployDescriptor INFO: Deploying configuration descriptor /etc/tomcat7/Catalina/localhost/host-manager.xml
Jul 10, 2017 7:06:21 PM org.apache.catalina.startup.TldConfig execute INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.

当我用netstat查看时,显示用户tomcat7正在监听8080

tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      115        32984       -   

$ id -u tomcat7  
$ 115           

我尝试在 ssh 终端中 wget localhost:8080,它显示

Connecting to localhost (localhost)|127.0.0.1|:8080... connected.
HTTP request sent, awaiting response... 

然后挂在那里。

任何想法或建议将不胜感激!

更新

事实证明,防火墙不是问题的根本原因,即使不允许端口 8443 Tomcat 也能正常工作(当然你需要允许 8080)。没有显示 "Server started" 消息的原因是 Tomcat 需要很长时间才能启动(第一次 1346049 毫秒,重新启动时 354034 毫秒,除了默认 index.html 之外没有安装网络应用程序), 没有响应请求的原因也是还没有启动完成

这是我第一次看到Tomcat需要这么长时间才能开始,也是我一开始没有意识到的原因。我怀疑(通过一些搜索)这是由 Tomcat Jar 扫描引起的。一旦我有更多细节,将继续更新这个问题。

更新 - 问题已解决

原来我遇到了同样的问题 and the solution is here。简而言之,大部分时间都花在了以下任务上:

Creation of SecureRandom instance for session ID generation using [SHA1PRNG]

需要Java加载/dev/random来获取随机数。 /dev/random 通常从 keyboard/mouse 输入中获取其熵源,这无法在无头虚拟机上提供足够的随机性。这导致随机数在计算期间为 "used up" 并导致大量等待。解决方案是安装 haveged,它使用其他来源提供随机性(详情见 link)。

我安装了haveged,现在tomcat启动只需1秒,一切正常。

感谢您提出如此有趣的问题。

我从未使用过 Google 云服务,但我设法重现了您的问题。

reading a little 之后,我发现您需要更新 防火墙规则 以启用对 8080 端口的访问。

转到:

1)(汉堡图标,左上角) 2)网络 3) 防火墙规则 4) 新增

我创建了一个名为 'allow-tomcat7' 的具有以下属性:

Descripción

Enables Tomcat 7 access
Red

default
Prioridad

1000
Dirección

Entrada
Acción tras coincidencia

Permitir
Filtros de origen

Intervalos de IP    
0.0.0.0/0
Protocolos y puertos

tcp:8080
tcp:8443
udp:8080

当您编辑配置时,有一个 'target tags' 的选项,尽管我创建了一个 'tag' 并将其仅应用于我的新 EC 实例,但它不起作用。我不得不删除目标标签,它就像一个魅力:

Make sure you allow access only for your IP address!

你需要调整你的安全设置,否则,你将成为一个蜜罐,一旦我为每个人启用了端口,几个机器人开始扫描它:

daychuzleo@testing-tomcat:~$ sudo tcpdump -i ens4 port 8080
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens4, link-type EN10MB (Ethernet), capture size 262144 bytes

20:39:31.437634 IP 170.251.221.183.54162 > testing-tomcat.c.hip-river-163201.internal.http-alt: Flags [.], seq 1638030511:1638030512, ack 1250919796, win 259, length 1: HTTP
20:39:31.437665 IP testing-tomcat.c.hip-river-163201.internal.http-alt > 170.251.221.183.54162: Flags [.], ack 1, win 231, options [nop,nop,sack 1 {0:1}], length 0

20:39:37.133899 IP 170.251.221.183.53878 > testing-tomcat.c.hip-river-163201.internal.http-alt: Flags [.], seq 2436191518:2436191519, ack 4071767590, win 259, length 1: HTTP
20:39:37.133930 IP testing-tomcat.c.hip-river-163201.internal.http-alt > 170.251.221.183.53878: Flags [.], ack 1, win 222, options [nop,nop,sack 1 {0:1}], length 0

20:39:51.379839 IP 170.251.221.183.54162 > testing-tomcat.c.hip-river-163201.internal.http-alt: Flags [F.], seq 1, ack 1, win 259, length 0
20:39:51.392375 IP 170.251.221.183.47923 > testing-tomcat.c.hip-river-163201.internal.http-alt: Flags [S], seq 1420913913, win 8192, options [mss 1386,nop,wscale 8,nop,nop,sackOK,unknown-76 0x01010a18e9680005,unknown-76 0x0c01,nop,eol], length 0
20:39:51.392410 IP testing-tomcat.c.hip-river-163201.internal.http-alt > 170.251.221.183.47923: Flags [S.], seq 507557961, ack 1420913914, win 28400, options [mss 1420,nop,nop,sackOK,nop,wscale 7], length 0
20:39:51.421934 IP testing-tomcat.c.hip-river-163201.internal.http-alt > 170.251.221.183.54162: Flags [.], ack 2, win 231, length 0
20:39:51.586555 IP 170.251.221.183.47923 > testing-tomcat.c.hip-river-163201.internal.http-alt: Flags [.], ack 1, win 259, length 0
20:39:51.590317 IP 170.251.221.183.47923 > testing-tomcat.c.hip-river-163201.internal.http-alt: Flags [P.], seq 1:389, ack 1, win 259, length 388: HTTP: GET / HTTP/1.1
20:39:51.590337 IP testing-tomcat.c.hip-river-163201.internal.http-alt > 170.251.221.183.47923: Flags [.], ack 389, win 231, length 0

我无法让它与 wget 一起工作,但我想你会找到它的。

更新:

我忘了提一些你可能没有配置的东西:

-允许您的 VM 实例中的 HTTP 和 HTTPS 防火墙:

  • 尝试使用网络导航器(Chrome、Firefox),不要使用 wget。
  • 确认您没有被公司防火墙过滤,尝试在您的手机 phone 或不受限制的网络中使用 4g 进行测试,或者让您的 IT 团队允许您访问到(每次)生成的临时 public IP(和端口)。

    • 使用以下方式启动服务:

    sudo 服务tomcat7 启动

    • 尝试重新安装 tomcat

我做的其他事情(研究过程中)

  • 将服务从 IPV6 转移到 IPV4

    daychuzleo@testing-tomcat:~$ netstat -ntpl (并非所有进程都可以识别,非拥有的进程信息 不会显示,你必须是 root 才能看到这一切。) 活跃的互联网连接(仅限服务器) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program 名称 tcp 0 0 0.0.0.0:22 0.0.0.0:* 听 -
    tcp 0 0 0.0.0.0:8080 0.0.0.0:* 听 -
    tcp6 0 0 :::22 :::* 听 -

为此,编辑默认 tomcat 并在 JavaOPTS 中添加 IPV4 选项:

vim /etc/default/tomcat

JAVA_OPTS="-Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC -Djava.net.preferIPv4Stack=true"

禁用 8443 重定向

评论 server.xml 中的 "redirectPort" 部分:

vim /etc/tomcat/server.xml 

 <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               URIEncoding="UTF-8"
               address="0.0.0.0"/>
               <!--redirectPort="8443" />-->

Verify each change by restarting your tomcat instance.