我跟着这个http://www.mogilowski.net/lang/en-us/2014/04/22/install-apache-tomcat-8-on-debian-7-wheezy-with-virtual-hosts-and-apache2 -integrate /在VPS上安装tomcat,版本8.0.20 …
我试图改变港口80,但没有办法做到这一点,我曾尝试:
http://beginlinux.com/server/ubuntu/changing-the-port-on-tomcat
但似乎没有工作,从日志里面的catalina.out得到这个错误:
25-Feb-2015 01:32:23.879 SEVERE [main] org.apache.catalina.core.StandardService.initInternal Failed to initialize connector [Connector[HTTP/1.1-$ org.apache.catalina.LifecycleException: Failed to initialize component [Connector[HTTP/1.1-80]] at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:106) at org.apache.catalina.core.StandardService.initInternal(StandardService.java:567) at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102) at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:851) at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102) at org.apache.catalina.startup.Catalina.load(Catalina.java:576) at org.apache.catalina.startup.Catalina.load(Catalina.java:599) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:310) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:484) Caused by: org.apache.catalina.LifecycleException: Protocol handler initialization failed at org.apache.catalina.connector.Connector.initInternal(Connector.java:962) at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102) ... 12 more Caused by: java.net.SocketException: Permission denied at sun.nio.ch.Net.bind0(Native Method) at sun.nio.ch.Net.bind(Net.java:444) at sun.nio.ch.Net.bind(Net.java:436) at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:214) at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:343) at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:732) at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:457) at org.apache.coyote.http11.AbstractHttp11JsseProtocol.init(AbstractHttp11JsseProtocol.java:120) at org.apache.catalina.connector.Connector.initInternal(Connector.java:960) ... 13 more
这是我的连接器端口,它有什么不对?
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" />
您需要以root身份运行Tomcat,以便能够绑定到端口80.所有低于1024的端口都需要超级用户权限才能进行绑定。
这也是stacktrace中最后一个exception试图告诉你的:
Caused by: java.net.SocketException: Permission denied at sun.nio.ch.Net.bind0(Native Method) at sun.nio.ch.Net.bind(Net.java:444) at sun.nio.ch.Net.bind(Net.java:436) at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:214) at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:343) at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:732) at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:457) at org.apache.coyote.http11.AbstractHttp11JsseProtocol.init(AbstractHttp11JsseProtocol.java:120) at org.apache.catalina.connector.Connector.initInternal(Connector.java:960) ... 13 more
一个非常短的警告,没有这成为一个扩展的安全性讨论:从安全的angular度来看,通常不是一个好主意,超级用户权限运行Tomcat(或可能是任何Java应用程序)。 Tomcat托pipe的Web应用程序中的错误可能导致使用这些权限执行任意代码,可能会给远程攻击者对系统的root权限。
由于这个原因,默认的Tomcat端口是无特权的8080(等等)。 它不需要超级用户权限来绑定,因此Tomcat可以作为一个普通的系统用户来运行。
如果您确实需要通过端口80访问由Tomcat托pipe的Web应用程序,则应该使用诸如Apache之类的Web服务器来访问Tomcat实例。 它侦听端口80并反向代理请求到Tomcat。 这是更安全的,不仅仅是因为Apache绑定到端口80后放弃了超级用户权限。
这样做的Apache虚拟主机configuration可能如下所示:
<VirtualHost *:80> ServerAdmin webmaster ServerName foo.example.com ProxyPreserveHost on ProxyRequests off ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ </VirtualHost>