我使用Tomcat7(ami-518e4c38)的Amazon开箱即用实例,为其部署了一个war文件,但仍然遇到503错误。
我已将连接器设置为侦听server.xml中的端口80,在默认安全组中我将80(HTTP)设置为0.0.0.0/0
我假设我不必手动启动/停止tomcat,应该在启动实例时启动。我在这个问题上是否正确?
当我在端口80上ping localhost(同时ssh进入实例)2次时,我得到:
2 packets transmitted, 2 received, 0% packet loss, time 999ms
非常感谢任何帮助。
答案 0 :(得分:0)
说真的,这不是一个答案,你应该描述你的初始情况以及你在答案中所做的并接受它。
我只想澄清发生的事情,我需要您的反馈以了解更多信息。
最初你有一个503错误,这意味着服务不可用,通常Tomcat是在Apache后面配置的,我的意思是Apache服务器得到(所有)请求并且可以转发(某些) )如果配置为Tomcat,则将它们添加到Tomcat中。
如果您收到503错误,则表示有一些服务器已启动并正在运行以回复您,这应该是Apache。如果我关闭Tomcat并尝试请求将转发到Tomcat的URL,我得到:
服务暂时不可用
由于维护停机或容量问题,服务器暂时无法为您的请求提供服务。请稍后再试。 private.it端口80上的Apache / 2.2.17(Ubuntu)服务器
这就是为什么我的第一个想法是检查Tomcat是否正在运行。然后你做了:
$ ps fax | grep tomcat
你得到tomcat实际上正在运行:
1127 pts / 0 S + 0:00 _ grep tomcat 987? Sl 0:42 / usr / lib / jvm / jre / bin / java -classpath /opt/tomcat7/bin/bootstrap.jar:/opt/tomcat7/bin/tomcat-juli.jar -Dcatalina.base = / opt / tomcat7 -Dcatalina.home = / opt / tomcat7 -Djava.awt.headless = true -Djava.endorsed.dirs = / opt / tomcat7 / endorsed -Djava.io.tmpdir = / opt / tomcat7 / temp -Djava.util.logging。 config.file = / opt / tomcat7 / conf / logging.properties -Djava.util.logging.manager = org.apache.juli.ClassLoaderLogManager org.apache.catalina.startup.Bootstrap start
另一个原因可能是未正确配置Tomcat-Apache连接。然而,你发布Tomcat试图绑定端口80并失败:
2011年9月30日上午4:07:51 org.apache.coyote.AbstractProtocol init SEVERE:无法初始化与ProtocolHandler相关的终点[“http-bio-80”] java.net.BindException:地址已在使用中:80
我试图复制该错误,我进入了我的conf/server.xml
文件并将连接器更改为侦听端口80而不是8080:
<!-- A "Connector" represents an endpoint by which requests are received
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL HTTP/1.1 Connector on port 8080
-->
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
我启动tomcat并监控日志:
bin/startup.sh && tail -f logs/catalina.out
我得到的异常与你得到的异常相似,但并不完全相同:
SEVERE: Failed to initialize end point associated with ProtocolHandler ["http-bio-80"]
java.net.BindException: Permission denied <null>:80
现在,如果我检查Tomcat是否正在运行,我发现它确实正在运行。虽然没有检查,我认为在这样的情况下,服务器将刚刚放弃并退出。在我的情况下,修正将是关闭Apache并直接使用Tomcat,这对于高流量站点不可取,或者将Tomcat移回端口8080并安装mod_jk。
The installation of mod_jk支持Apache和Tomcat之间的通信。然后在虚拟主机配置中,我将挂载一个文件夹或根文件夹,并在必要时进行一些URL重写:
JkMount /webappname/* ajp13_worker
RewriteEngine on
RewriteRule ^/nametoshow/(.*)$ /webappname/$1 [PT,QSA]
一切都应该有效。但是,我不确定你是如何解决绑定错误的,你没有说。