无法访问 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.
我使用 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 扫描引起的。一旦我有更多细节,将继续更新这个问题。
更新 - 问题已解决
原来我遇到了同样的问题
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.