简体   繁体   English

server.xml文件中的Tomcat连接器定义

[英]Tomcat Connectors definition in server.xml file

I would like to understand Tomcat's connectors definitions in server.xml file. 我想了解server.xml文件中Tomcat的连接器定义。 What is the difference between the following configurations: 以下配置之间有什么区别:

    <Connector port="8080"
               protocol="HTTP/1.1"
               socket.directBuffer="true"
               redirectPort="8083"
               keyAlias="tomcat"
               enableLookups="true"
               connectionTimeout="60000"
               URIEncoding="UTF-8"
               server="NA"
               minSpareThreads="2"
               maxThreads="10"
               acceptCount="10"/>

    <Connector address="127.0.0.1"
               port="8080"
               protocol="HTTP/1.1"
               socket.directBuffer="true"
               redirectPort="8083"
               keyAlias="tomcat"
               enableLookups="false"
               connectionTimeout="60000"
               URIEncoding="UTF-8"
               server="NA"
               minSpareThreads="2"
               maxThreads="10"
               acceptCount="10"/>

    <Connector address="::1"
               port="8080"
               protocol="HTTP/1.1"
               redirectPort="8083"
               enableLookups="false"
               connectionTimeout="60000"
               URIEncoding="UTF-8"
               server="NA"
               minSpareThreads="2"
               maxThreads="5"
               acceptCount="10"/>

According to Tomcat 8 connectors documentation the address property should be used only when the server has more than one IP address. 根据Tomcat 8连接器文档 ,仅当服务器具有多个IP地址时,才应使用address属性。 Usually this configuration leads to the next 2 exception during Tomcat startup (since all 3 connectors tries to listen on the same IP and port): 通常,此配置会在Tomcat启动期间导致下2个异常(因为所有3个连接器都尝试监听相同的IP和端口):

26/10/2015 10:07:56 SEVERE org.apache.coyote.AbstractProtocol init Failed to initialize end point associated with ProtocolHandler ["http-nio-127.0.0.1-8080"]
java.net.BindException: Address already in use
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:437)
    at sun.nio.ch.Net.bind(Net.java:429)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
    at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:340)
    at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:743)
    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)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    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:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:310)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:484)

26/10/2015 10:07:56 SEVERE org.apache.coyote.AbstractProtocol init Failed to initialize end point associated with ProtocolHandler ["http-nio-0:0:0:0:0:0:0:1-8080"]
java.net.BindException: Address already in use
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:437)
    at sun.nio.ch.Net.bind(Net.java:429)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
    at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:340)
    at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:743)
    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)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    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:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:310)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:484)

There is any reason to define 3 connectors like above? 是否有理由定义上述3个连接器?

You can't bind to the same TCP port multiple times unless every bind is also to a specific IP address. 除非每次绑定也绑定到一个特定的IP地址,否则您不能多次绑定到同一TCP端口。 Your first Connector fails this test. 您的第一个Connector未通过此测试。 The other two specify address= , which makes them valid. 另外两个指定address= ,这使它们有效。

According to Tomcat 8 connectors documentation the address property should be used only when the server has more than one IP address 根据Tomcat 8连接器文档,仅当服务器具有多个IP地址时,才应使用address属性

It doesn't actually say that, but it isn't relevant, as every host has at least two addresses: 127.0.0.1 and its real IP address. 它实际上并没有这么说,但并不相关,因为每个主机至少都有两个地址:127.0.0.1及其实际I​​P地址。 In your case 3, as you also have ::1 , the IPv6 loopback address. 在您的情况3中,您也有::1 ,即IPv6回送地址。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM