Page tree
Skip to end of metadata
Go to start of metadata

Confluence 6.(question) introduces Synchrony (allowing collaborative editing) which cannot accept AJP connections. The preferred configuration is Using Apache with mod_proxy.

Unfortunately, I believe there is a mistake in the Confluence instructions... so after posting my questions here are my notes to figure this all out.


Analysis 1

I believe I've found the error. It probably has to do with the search engine. On the test server's application server - with more memory and updated OS and newer Java - making this batch.js request results in a response. However, on the restricted environment it does not,

wget http://localhost:8090/wiki/s/ca6b4214dc4957e5b90edfd999cd552a-CDN/en_US/8100/e6b42acaec191a9bce4ab234dae0b1b08af15496/e00352cb0013a1867dc5de3984f0fae4/_/download/contextbatch/js/confluence-search-ui-plugin-main,-_super/batch.js?locale=en-US

Let's start with Java,

Not working server = java version "1.8.0_74" 32-bit
Working = java version "1.8.0_221" 64-bit

Now with matching Java version at least, but not 64-bit.

I noticed that "synchrony version" does not show up on startup of the system with the issue,

04-Aug-2019 21:50:06.328 INFO [Catalina-utility-2] org.springframework.web.context.support.AnnotationConfigWebApplicationContext.loadBeanDefinitions Registering annotated classes: [class com.atlassian.synchrony.proxy.websocket.WebSocketConfig,class com.atlassian.synchrony.proxy.web.SynchronyWebMvcConfig]
2019-08-04 21:50:06,648 INFO [Catalina-utility-1] [com.atlassian.confluence.lifecycle] contextInitialized Starting Confluence 6.15.7 [build 8100 based on commit hash e6b42acaec191a9bce4ab234dae0b1b08af15496] - synchrony version 2.1.0-release-confluence_6.15-32f7299a
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation

Analysis 2

Now with matching Java version at least, but not 64-bit.

I noticed that "synchrony version" does not show up on startup of the system with the issue,

04-Aug-2019 21:50:06.328 INFO [Catalina-utility-2] org.springframework.web.context.support.AnnotationConfigWebApplicationContext.loadBeanDefinitions Registering annotated classes: [class com.atlassian.synchrony.proxy.websocket.WebSocketConfig,class com.atlassian.synchrony.proxy.web.SynchronyWebMvcConfig]
2019-08-04 21:50:06,648 INFO [Catalina-utility-1] [com.atlassian.confluence.lifecycle] contextInitialized Starting Confluence 6.15.7 [build 8100 based on commit hash e6b42acaec191a9bce4ab234dae0b1b08af15496] - synchrony version 2.1.0-release-confluence_6.15-32f7299a
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation

Ok same Java version including 64-bit...

Solution!

And that was it!

Make sure to adjust Confluence's context path through the admin console Server Base URL, in my case to www.breakitdown/wiki Here is my current working files,

server.xml
<Server port="8000" shutdown="SHUTDOWN" debug="0">
    <Service name="Tomcat-Standalone">
        <!--
         ==============================================================================================================
         DEFAULT - Direct connector with no proxy, for unproxied HTTP access to Confluence.

         If using a http/https proxy, comment out this connector.
         ==============================================================================================================
        -->
<!--
        <Connector port="8090" connectionTimeout="20000" redirectPort="8443"
                   maxThreads="48" minSpareThreads="10"
                   enableLookups="false" acceptCount="10" debug="0" URIEncoding="UTF-8"
                   protocol="org.apache.coyote.http11.Http11NioProtocol"/>
-->
        <!--
         ==============================================================================================================
         HTTP - Proxying Confluence via Apache or Nginx over HTTP

         If you're proxying traffic to Confluence over HTTP, uncomment the connector below and comment out the others.
         Make sure you provide the right information for proxyName and proxyPort.

         For more information see:
            Apache - https://confluence.atlassian.com/x/4xQLM
            nginx  - https://confluence.atlassian.com/x/TgSvEg

         ==============================================================================================================
        -->

        <Connector port="8090" connectionTimeout="20000" redirectPort="8443"
                   maxThreads="48" minSpareThreads="10"
                   enableLookups="false" acceptCount="10" debug="0" URIEncoding="UTF-8"
                   protocol="org.apache.coyote.http11.Http11NioProtocol"
                   scheme="http" proxyName="www.breakitdown.ca" proxyPort="80"/>

        <!--
         ==============================================================================================================
         HTTPS - Direct connector with no proxy, for unproxied HTTPS access to Confluence.

         For more info see https://confluence.atlassian.com/x/s3UC
         ==============================================================================================================
        -->

        <!--
        <Connector port="8443" maxHttpHeaderSize="8192"
                   maxThreads="150" minSpareThreads="25"
                   protocol="org.apache.coyote.http11.Http11Nio2Protocol"
                   enableLookups="false" disableUploadTimeout="true"
                   acceptCount="100" scheme="https" secure="true"
                   clientAuth="false" sslProtocol="TLSv1.2" sslEnabledProtocols="TLSv1.2" SSLEnabled="true"
                   URIEncoding="UTF-8" keystorePass="<MY_CERTIFICATE_PASSWORD>"/>
        -->

        <!--
         ==============================================================================================================
         HTTPS - Proxying Confluence via Apache or Nginx over HTTPS

         If you're proxying traffic to Confluence over HTTPS, uncomment the connector below and comment out the others.
         Make sure you provide the right information for proxyName and proxyPort.

         For more information see:
            Apache - https://confluence.atlassian.com/x/PTT3MQ
            nginx  - https://confluence.atlassian.com/x/cNIvMw
         ==============================================================================================================
        -->

        <!--
        <Connector port="8090" connectionTimeout="20000" redirectPort="8443"
                   maxThreads="48" minSpareThreads="10"
                   enableLookups="false" acceptCount="10" debug="0" URIEncoding="UTF-8"
                   protocol="org.apache.coyote.http11.Http11NioProtocol"
                   scheme="https" secure="true" proxyName="<subdomain>.<domain>.com" proxyPort="443"/>
        -->

        <Engine name="Standalone" defaultHost="localhost" debug="0">
            <Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="false" startStopThreads="4">
                <Context path="/wiki" docBase="../confluence" debug="0" reloadable="false" useHttpOnly="true">
                    <!-- Logging configuration for Confluence is specified in confluence/WEB-INF/classes/log4j.properties -->
                    <Manager pathname=""/>
                    <Valve className="org.apache.catalina.valves.StuckThreadDetectionValve" threshold="60"/>
                </Context>

                <Context path="${confluence.context.path}/synchrony-proxy" docBase="../synchrony-proxy" debug="0"
                         reloadable="false" useHttpOnly="true">
                    <Valve className="org.apache.catalina.valves.StuckThreadDetectionValve" threshold="60"/>
                </Context>
            </Host>
        </Engine>
    </Service>
</Server>


You can test this still by directly hitting the 8090 port.

And http configuration where my hosts file points to the application server,

Apache Configuration
<VirtualHost *:80>
        ServerAdmin webmaster@t01app

        ServerName www.breakitdown.ca
        ServerAlias breakitdown.ca

        # Enforce www in front of url.
        RewriteEngine On
        RewriteCond %{HTTP_HOST} !^www\.breakitdown\.ca$ [NC]
        RewriteRule (.*) http://www.breakitdown.ca$1 [R,L]

        DocumentRoot /opt/www.breakitdown.ca/www

        <Directory /opt/www.breakitdown.ca/www/>
                Options Indexes FollowSymLinks
                AllowOverride None
                Require all granted
                DirectorySlash Off
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/www.breakitdown.ca.error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/www.breakitdown.ca.access.log combined


        ProxyRequests Off
        ProxyPreserveHost On

        ProxyPass /synchrony http://t01app:8091/synchrony
        <Location /synchrony>
                Require all granted
                RewriteEngine on
                RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
                RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
                RewriteRule .* ws://t01app:8091%{REQUEST_URI} [P]
        </Location>

        # Can probably remove this as it looks like a fallback for "/synchrony". Will do once I've had a chance to retest the system.
        ProxyPass /synchrony-proxy http://t01app:8091/synchrony-proxy
        <Location /synchrony-proxy>
                Require all granted
                RewriteEngine on
                RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
                RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
                RewriteRule .* ws://t01app:8091%{REQUEST_URI} [P]
        </Location>

        # I noticed errors in the browser logs without this. Looks like Atlassian coders may have some hard coding of using "/s" for synchrony.  
        ProxyPass /s http://t01app:8091/synchrony
        <Location /s>
                Require all granted
                RewriteEngine on
                RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
                RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
                RewriteRule .* ws://t01app:8091%{REQUEST_URI} [P]
        </Location>

        <Proxy *>
                Require all granted
        </Proxy>
        ProxyPass /wiki http://t01app:8090/wiki
        ProxyPassReverse /wiki http://t01app:809/wiki

        # Perform 301 permanent redirect to Board of Trustees Home
        #Redirect permanent /board/ http://www.breakitdown.ca/wiki/display/board/Home
        #Redirect permanent /board http://www.breakitdown.ca/wiki/display/board/Home

</VirtualHost>




  • No labels