javaspringtomcatajpsap-commerce-cloud

secure AJP connector not rendering


We have a hybris server behind an apache web server that are linked with ajp connectors. This is working perfectly however for some reason after updating to hybris 5.3 (and tomcat 7) the secure ajp connector is not rendering.

In the hybris tomcat config folder we have this in the server.xml:

${tomcat.connectors.ajp.plain}

which renders on ant clean all to this in the platform server.xml

<Connector  protocol="AJP/1.3"  port="8009" proxyPort="80" redirectPort="443" />

this works for non secure connections however we need to also render the secure connector:

<Connector protocol="AJP/1.3" port="8010" proxyPort="443" scheme="https" secure="true" />

I could just hard code this into the server.xml but that doesn't seem like the best way to do it. and I can't find where ${tomcat.connectors.ajp.plain} is actually rendered. Is there a similar property somewhere that will render the secure connector using the ports defined in the local.properties?


Solution

  • I'm afraid you have to declare it manually in your server.xml template in the configuration directory.

    In actual fact, I prefer to do this for both AJP connectors as the templated one injected by the variable you mention is not very well configured and I have seen significant performance issues as a result. For example the number of threads is not specified and it is not associated with an executor. This means that when under large load, the number of active threads can grow to a silly number and cause the whole thing to fall over.

    In fact, below is a snippet of the config/tomcat/conf/server.xml I use, which I have developed over 7 years of working exclusively on Hybris. Not only does it have sensible configurations, it also uses the more performant non-blocking IO protocols.

    Hope this helps.

    <Executor   name="hybrisExecutor"
                namePrefix="hybrisHTTP"
                maxThreads="${tomcat.maxthreads}"
                minSpareThreads="${tomcat.minsparethreads}"
                maxIdleTime="${tomcat.maxidletime}"/>
    
    <Connector  port="${tomcat.http.port}"
                maxHttpHeaderSize="8192"
                maxThreads="${tomcat.maxthreads}"
                protocol="org.apache.coyote.http11.Http11NioProtocol"
                executor="hybrisExecutor"
                enableLookups="false"
                acceptCount="${tomcat.acceptcount}"
                connectionTimeout="20000"
                URIEncoding="UTF-8"
                disableUploadTimeout="true" />
    
    <Connector  port="${tomcat.ssl.port}"
                maxHttpHeaderSize="8192"
                maxThreads="${tomcat.maxthreads}"
                protocol="org.apache.coyote.http11.Http11NioProtocol"
                executor="hybrisExecutor"
                enableLookups="false"
                acceptCount="${tomcat.acceptcount}"
                connectionTimeout="20000"
                disableUploadTimeout="true"
                URIEncoding="UTF-8"
                SSLEnabled="true"
                scheme="https"
                secure="true"
                clientAuth="false"
                sslProtocol="TLS"
                keystoreFile="${catalina.home}/lib/keystore"
                keystorePass="123456" />
    
    <!--
        We explicitly declare the AJP connectors as we want to separate HTTP and SSL traffic and the default connector setting Hybris provides is not good enough.
    -->
    <Connector  protocol="org.apache.coyote.ajp.AjpNioProtocol"
                executor="hybrisExecutor"
                enableLookups="false"
                acceptCount="${tomcat.acceptcount}"
                connectionTimeout="120000"
                maxThreads="${tomcat.maxthreads}"
                port="${tomcat.ajp.port}"
                proxyPort="${proxy.http.port}"
                redirectPort="${proxy.ssl.port}"
                URIEncoding="UTF-8"
                useIPVHosts="${tomcat.ajp.useipv}" />
    
    <Connector  protocol="org.apache.coyote.ajp.AjpNioProtocol"
                executor="hybrisExecutor"
                enableLookups="false"
                acceptCount="${tomcat.acceptcount}"
                connectionTimeout="120000"
                maxThreads="${tomcat.maxthreads}"
                port="${tomcat.ajp.secureport}"
                proxyPort="${proxy.ssl.port}"
                redirectPort="${proxy.http.port}"
                scheme="https"
                secure="true"
                URIEncoding="UTF-8"
                useIPVHosts="${tomcat.ajp.useipv}" />
    

    The variables are just properties you declare in local.properties. They are substituted at build time by the ant deploy task when it builds the actual server.xml in the platform tomcat directory.