All,

I am attempting to set up a proxy using mod_jk to a backend Tomcat
application.  I have switched to using mod_jk from mod_proxy_http as the
application recommends using AJP and I've read that mod_jk provides more
funtionality than mod_proxy_ajp.  Here is the layout:

+---------------------+
|   Firewall Public |
+---------------------+
+-------------------------------------------+
|      +------+   +-------+  +-------+      |
|      | httpd|   | httpd |  | httpd   |      |
|      |    1 |       |   2   |  |   3       |      |
|      +------+   +-------+  +-------+      |
+-------------------------------------------+
+----------------------+
|   Firewall Private |
+----------------------+
+------------------------------+
|    +--------+  +---------+   |
|    | tomcat |  |tomcat |    |
|    |   1       |  |    2      |    |
|    +--------+  +---------+   |
+------------------------------+

The SSL termination will be handled at the public firewall level and pass
requests to app.example.com back to one of the 3 proxy servers on port 80.
Here is what I have for my httpd.conf file (on all 3 nodes):

<BEGIN httpd.conf>

Listen 80

LoadModule systemd_module modules/mod_systemd.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule jk_module modules/mod_jk.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule mpm_event_module modules/mod_mpm_event.so

User apache
Group apache

ServerAdmin root@localhost

<Directory />

        AllowOverride none
        Require all denied

</Directory>

ErrorLog        "logs/error_log"
TransferLog     "logs/access_log"
LogLevel        debug

<IfModule log_config_module>

        LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"
\"%{User-Agent}i\" \"%{JSESSIONID}C\"" combined
        LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>

        LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"
\"%{User-Agent}i\" \"%{JSESSIONID}C\" %I %O" combinedio

    </IfModule>

        CustomLog "logs/access_log" combined

</IfModule>

JkWorkersFile   "/etc/httpd/conf/workers.properties"
JkShmFile       "logs/mod_jk.shm"
JkLogFile       "logs/mod_jk.log"

<VirtualHost *:80>

        <Location />

                Order allow,deny
                Deny from all

        </Location>

</VirtualHost>


<VirtualHost *:80>

        ServerName app.example.com

        JkLogFile       "logs/app.log"
        JkLogLevel      debug
        JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
        JkMount         /application lb

</VirtualHost>

<END httpd.conf>

And workers.properties:

<BEGIN workers.properties>

worker.list=node1, node2, lb

worker.node1.port=8009
worker.node1.host=app1.example.com
worker.node1.type=ajp13
worker.node1.lbfactor=1

worker.node2.port=8009
worker.node2.host=app2.example.com
worker.node2.type=ajp13
worker.node2.lbfactor=1

worker.lb.type=lb
worker.lb.balance_workers=node1,node2

<END workers.properties>

On the Tomcat side I have defined:

app1.example.com:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="node1">

app2.example.com:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="node2">

I do see the session ID and node{1,2} in the access logs even though the
configuration does not work.  Here is what I see in the error log:

[Tue Mar 06 15:39:47 2018] [109410:140304114849536] [debug]
map_uri_to_worker_ext::jk_uri_worker_map.c (1185): Attempting to map URI
'/' from 1 maps
[Tue Mar 06 15:39:47 2018] [109410:140304114849536] [debug]
find_match::jk_uri_worker_map.c (980): Attempting to map context URI
'/application=lb' source 'JkMount'
[Tue Mar 06 15:39:47 2018] [109410:140304114849536] [debug]
jk_translate::mod_jk.c (3977): no match for / found

What I would like to configure is for the URL https://app.example.com to
work without adding the https://app.example.com/application path as the
actual application needs.  Going directly to either node1 or node2 directly
with full URL works fine.

I appreciate any guidance, I hope I have not confused my needs too much.
Thanks in advance..

HB

Reply via email to