Mapping subdomain to tomcat web application

June 27, 2019 461 views
Apache Ubuntu 16.04

I have a subdomain
I have a java web application running in tomcat 8.5 on port 8086.

In /opt/tomcat/conf/server.xml I have a virtual host defined like below.

<Host name="" appBase="webapps/myapp-0.2" unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="test_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

I have an apache2 conf defines like below.

<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/

        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf

In public_html I have .htaccess defined like below.

RedirectPermanent /

My goal is to be able to hit the myapp-02 tomcat web app on port 8086 like so

I’m not sure what’s wrong but I get 404. I can’t seem to resolve to my web app running in tomcat.

Any help would be appreciated.

1 Answer


I would recommend using Apache Reverse Proxy, that way you would be able to pass all requests from to your Tomcat without even having to add the port at the end.

You can take a look a this step by step guide on how to configure that:

Hope that this helps!

by Mateusz Papiernik
In this tutorial, you will set up Apache as a reverse proxy using the `mod_proxy` extension to redirect incoming connections to underlying application server(s) running on the same network. There are instructions on setting up a simple web app using the Flask framework to show how Apache interacts with the real application hidden behind it, but you can also follow this tutorial using your existing application server, if you have one.
  • @bobbyiliev Thank you for your help. This has got me much further. However, because I already have mobile apps being used that point to, I need to ideally support both and Using reverse proxy as you indicated, is properly redirected to my tomcat server but I can’t seem to get virtualhost to work.

    Below is my apache2 site conf file.

    Listen 8086
    <VirtualHost *:80>
      ProxyPreserveHost On
      ProxyPass / http://localhost:8086/SecondAmendmentSupporters-0.2/
      ProxyPassReverse / http://localhost:8086/SecondAmendmentSupporters-0.2/
    <VirtualHost *:8086>
      ProxyPreserveHost On
      ProxyPass / http://localhost:8086/SecondAmendmentSupporters-0.2/
      ProxyPassReverse / http://localhost:8086/SecondAmendmentSupporters-0.2/

    Any more suggestions?

    • Hello,

      As port 8086 is already being used by tomcat you should not add it in your Apache Vhost as Apache might not be able to start (only one service can listen on 1 port at the same time).

      Instead if you just leave the reverse proxy setup for port 80 to forward the traffic to 8086. Then if you access your it should work as you would be hitting tomcat directly without going through Apache first.

      Hope that this helps and let me know how it goes!

Have another answer? Share your knowledge.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!