Confluence Docs 3.0 : Using Apache with mod_proxy This page last changed on Sep 01, 2009 by dyu. This page describes how to integrate Confluence into an Apache website, using mod_proxy. There are some common situations where you might do this: You have an existing Apache-based website, and want to add Confluence to the mix (eg. http://www.example.com/confluence). You have two or more Java applications, each running in their own application server on different ports, eg. http://localhost:8080/confluence and http://localhost:8081/jira. By setting up Apache with mod_proxy, you can have both available on the regular HTTP port (80), eg. at http://www.example.com/confluence and http://www.example.com/jira. If you are running JIRA and Confluence, we recommend this setup. It allows each app to be restarted, managed and debugged separately. This page describes how to configure mod_proxy. We describe two options: If you want a URL like http://www.example.com/confluence/, go to the simple configuration. If you want a URL like http://confluence.example.com/, go to the complex configuration. ## Simple configuration ##### Set the context path First, set your Confluence application path (the part after hostname and port) correctly. Say you want Confluence available at http://www.example.com/confluence/, and you currently have it running at http://localhost:8080/. The first step is to get Confluence available at http://localhost:8080/confluence/. To do this in Tomcat (bundled with Confluence), edit `conf/server.xml`, locate the "Context" definition:
    <Context path="" docBase="../confluence" debug="0" reloadable="true">
and change it to:
    <Context path="/confluence" docBase="../confluence" debug="0" reloadable="true">
Then restart Confluence, and ensure you can access it at http://localhost:8080/confluence/ ##### Configure mod_proxy Now enable mod_proxy in Apache, and proxy requests to the application server by adding the example below to your Apache httpd.conf (note: the files may be different on your system; the JIRA docs describe the process for Ubuntu/Debian layout):
    # Put this after the other LoadModule directives
    LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
    LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so

    # Put this in the main section of your configuration (or desired virtual host, if using Apache virtual hosts)
    ProxyRequests Off
    ProxyPreserveHost On

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    ProxyPass /confluence http://localhost:8080/confluence
    ProxyPassReverse /confluence http://localhost:8080/confluence
    <Location /confluence>
        Order allow,deny
        Allow from all
    </Location>
Note to Windows Users It is recommended that you specify the absolute path to the `mod_proxy.so` and `mod_proxy_http.so` files. ##### Set the URL for redirection You will need to modify the `server.xml` file in your tomcat's conf directory and set the URL for redirection. Locate this code segment
        <Connector port="8080" maxHttpHeaderSize="8192"
                   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                   enableLookups="false" redirectPort="8443" acceptCount="100"
                   connectionTimeout="20000" disableUploadTimeout="true" />
And append the following segment:
        <Connector port="8080" maxHttpHeaderSize="8192"
                   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                   enableLookups="false" redirectPort="8443" acceptCount="100"
                   connectionTimeout="20000" disableUploadTimeout="true"
                   proxyName="www.example.com" proxyPort="80"/>
Replace www.example.com with the URL you wish to be redirected to. ## Complex configuration A complex configuration involves using the mod_proxy_html filter to modify the proxied content en-route. This is required if the Confluence path differs between Apache and the application server. For example:
Externally accessible (Apache) URL | http://confluence.example.com/
Application server URL | http://app-server.internal.example.com:8080/confluence/
Notice that the application path in the URL is different in each. On Apache, the path is /, and on the application server the path is /confluence.
| For this configuration, you need to install the mod_proxy_html module, which is not included in the standard Apache distribution. Alternative solutions are discussed below.
    # Put this after the other LoadModule directives
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_http_module modules/mod_proxy_http.so
    LoadModule proxy_html_module modules/mod_proxy_html.so

    <VirtualHost *>
        ServerName confluence.example.com

        # Put this in the main section of your configuration (or desired virtual host, if using Apache virtual hosts)
        ProxyRequests Off
        ProxyPreserveHost On

        <Proxy *>
            Order deny,allow
            Allow from all
        </Proxy>

        ProxyPass / http://app-server.internal.example.com:8080/confluence
        ProxyPassReverse / http://app-server.internal.example.com:8080/confluence

        ProxyHTMLURLMap / /confluence/

        <Location />
            Order allow,deny
            Allow from all
        </Location>
    </VirtualHost>
The ProxyHTMLURLMap configuration can become more complex if you have multiple applications running under this configuration. The mapping should also be placed in a Location block if the web server URL is a subdirectory and not on a virtual host. The Apache Week tutorial has more information how to do this. ### More information The mod_proxy_html site has documentation and examples on the use of this module in the complex configuration. Apache Week has a tutorial that deals with a complex situation involving two applications and ProxyHTMLURLMap. Using Apache with virtual hosts and mod_proxy shows how to configure the special case where you want JIRA and Confluence running on separate application servers on virtual host subdomains. ### Alternatives If Tomcat is your application server, you have two options: use mod_jk to send the requests to Tomcat use Tomcat's virtual hosts to make your Confluence application directory the same on the app server and the web server, removing the need for the URL mapping. If your application server has an AJP connector, you can: use mod_jk to send the requests to your application server.

Document generated by Confluence on Nov 05, 2009 23:34